質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.63%

Wordpress カスタム投稿カレンダー タクソノミー毎にclass付与

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 567

ogata

score 4

前提・実現したいこと

初めて質問をさせていただきます。
Wordpressにて「SCHEDULE」というカスタム投稿を作成し、その記事をカレンダー形式にて表示しています。
さらに、該当の日付に記事タイトルが表示されるようにしています。

カレンダー表示の作成には下記の記事を参照して作成しました。
http://kotori-blog.com/wordpress/cpt_calendar/
(「Custom Post Type Permalinks」プラグインを使用していない場合のコードにて作成しました。)

この「SCHEDULE」というカスタム投稿にて、
・LIVE
・EVENT
というタクソノミーを指定して、分類分けをしています。

カレンダーに表示される際に、このタクソノミー毎に記事タイトルを囲っている<div>に、その記事が属するタクソノミー名のclassを付与してcssでスタイリングをしたいのですが、class付与の方法がわかりません。

どなたか、解決策のわかる方がいらっしゃいましたら、ご教授願えますと幸いです。

該当のソースコード(functions.php)

function my_get_calendar($cpt){
  ob_start();
  get_cpt_calendar($cpt);
  $output = ob_get_contents();
  ob_end_clean();

  if(preg_match_all('@<td( id="today")?><a href="' . get_option('home') . '/([^"]*?)\?post_type=([^"]*?)" title="[^"]*?">([0-9]+?)</a>@i', 
    $output, $matches)){
    foreach($matches[0] as $key => $match){
      $date  = preg_replace('@/@', '', $matches[2][$key]);
      $year  = substr($date, 0, 4);
      $month = substr($date, 4, 2);
      $day   = substr($date, 6, 2);

      global $wpdb;
      $posts = $wpdb->get_results("SELECT ID, post_title "
        . "FROM $wpdb->posts "
        . "WHERE YEAR(post_date) = '$year' "
        . "AND MONTH(post_date) = '$month' "
        . "AND DAY(post_date) = '$day' "
        . "AND post_type = '$cpt' AND post_status = 'publish' "
        . "ORDER BY post_date DESC"
      );

      $link = '';
      foreach($posts as $post)
        $link .= '<div><a href="'. get_permalink($post->ID) . '">' . $post->post_title . '</a></div>';
      $output = preg_replace('@' . preg_quote($match) . '@', $match . $link, $output);
    }
  }
  return $output;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

post_class 関数でしょうか。

WordPress の標準テーマなどで使われています。
投稿が所属するカテゴリーやタクソノミーがあると .category-slug や .taxonomy-slug のような class-name をつけます。

使い方は、codex を参照してください。

例:

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>


と記載すると 投稿IDやカテゴリー等に応じた class 名を付加して

<div id="post-4564" class="post post-4564 category-dancing">


のような HTML になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/12 16:36

    回答ありがとうございます。試してみたのですが、うまく実装することができませんでした。
    現状、該当のソースコードを「functions.php」内に書いて、テンプレートファイルで<?php echo my_get_calendar('投稿タイプ名'); ?>として読み込んでいます。
    投稿タイプには「カスタム投稿」を利用しています。
    「functions.php」内のソースコードの下から6行目あたりを書き換えれば良いのではないかと思うのですが、うまくいきません。

    キャンセル

  • 2019/03/12 16:46 編集

    SQLで、直接検索している理由は何でしょうか?

    コードからは、SQL で実行しないとダメな理由がわからないのですが、post_class 関数は、WordPress のループ内しか使えませんので、WP_Query 等の標準の取得方法で、検索して、WordPress ループを使ってください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる