サポート » テーマ » カスタム投稿の記事一覧にtermを用いてClass指定をしたい

  • 解決済 194sleep

    (@194sleep)


    WordPress バージョン4.1.8を使用しています。
    現在カスタム投稿を用いて世界のお祭り一覧を作成しているのですが、
    この記事を年別の記事に仕分けた上で、各国の国旗を記事名の前に表示することに苦戦しております。
    お力をお貸し頂けないでしょうか?

    イメージとしては
    ————————————–
    [2015年]
      【国旗画像】アメリカの祭り
      【国旗画像】イギリスの祭り
      【国旗画像】日本の祭り

    [2014年]
      【国旗画像】スイスの祭り
      【国旗画像】アメリカの祭り
      【国旗画像】中国の祭り

    ————————————–

    このような感じです。
    ネットで色々と参考になるソースを探し以下のコードまではかけましたが、
    国旗画像を表示するためのClassの指定にタームを取得し入れることができず
    頭を抱えている次第です。

    <div class="show_list">
    <?php
        // 出力する内容を設定
        function archiveFunc($year){
    		query_posts( array(
    		'post_type' => 'festival',
    		'posts_per_page' => -1,
    		'year' => $year,
    		'order' => 'ASC',
    		));
    
            if(have_posts()) :
    ?>
    
    <dl class="year_post_box clear_fix">
    
        <dt class="show_year"><?php echo $year; ?>年</dt>
    <?php while(have_posts()) : the_post(); ?>
    
        <dd class="year_post">
            <div class="cat-【ここにタームスラッグ】"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
        </dd>        
    
    <?php endwhile; ?>
    </dl>
    <?php   endif;
            wp_reset_query();
    }
    
        $thisyear = date('Y'); // 現在の西暦年を取得
    
        for ($year=$thisyear; $year >= 2000; $year--) {
            // $year >= で指定した年から現在の年までの記事を出力(例では2000年から現在まで)
            archiveFunc($year);
        }
    ?>
    </div>

    構造は
    カスタム投稿タイプ
     「festival」
    タクソノミー
     「show-category」
    ターム
     「usa」「netherlands」「japan」など

    未熟ながらもいろいろと考え、
    「query_posts」の中でタームスラッグを取得し、<?php echo ○○; ?>
    のように書き出せばいいかと思っているのですが、上手くいかないため
    大変恐縮なのですがこちらのフォーラムに助けを求めた次第です。

    何卒ご教授いただけないでしょうか?

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • テンプレートタグ/post class – WordPress Codex 日本語版

    こちらを利用すれば各ポストの情報に基づいたクラスを付与することができます。(おそらく show-category-usa といったクラス名になると思いますが)

    mimosafa様

    ご回答ありがとうございます。
    ご提示いただいたサイトを見て

    <?php post_class(); ?> をプログラム内に記載したのですが、
    ご教授いただいたスタイルではなく投稿タイプである「festival」が排出されました。

    <div class="show_list">
    
    <dl class="year_post_box clear_fix">
    
        <dt class="show_year">2015年</dt>
    
        <dd class="year_post">
            <div class="post-261 festival type-festival status-publish hentry"><a href="URL/festival/261">2015アメリカの祭り</a></div>
        </dd>        
    
        <dd class="year_post">
            <div class="post-272 festival type-festival status-publish hentry"><a href="URL/festival/272">2015マイアミの祭り</a></div>
        </dd>        
    
    </dl>
    
    <dl class="year_post_box clear_fix">
    
        <dt class="show_year">2014年</dt>
    
        <dd class="year_post">
            <div class="post-246 festival type-festival status-publish hentry"><a href="URL/festival/246">2014日本のまつり</a></div>
        </dd>        
    
    </dl>
    </div>

    タームスラッグを取得してくるためには何かオプションが必要なのでしょうか?
    現在のプログラムは「page-festival.php」というテンプレートを使用しているのですが
    その辺りもうまくいかない原因なのでしょうか?

    質問ばかりで申し訳ありませんが何卒お返事いただければと思います。
    何卒よろしくお願いいたします。

    カスタムタクソノミー show-category の初期化(register_taxonomy())時に 'public' => true, とされていますでしょうか?
    WordPress のソースを見たところそうなっていないとクラスが付与されないようです。

    WordPress › get_post_class() | Function | WordPress Developer Resources#Source

    post_class() を使わない場合は、

    <?php
    while(have_posts()) : the_post();
    	$attr = '';
    	$cats = get_the_terms( $post, 'show-category' );
    	if ( $cats ) {
    		$cat = array_shift( $cats );
    		$attr = ' class="cat-' . esc_attr( $cat->slug ) . '"';
    	} ?>
    	<dd class="year_post">
    	    <div<?php echo $attr; ?>><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
    	</dd>
    <?php
    endwhile; ?>

    こんな感じでしょうか。未検証なのでどこか間違っていたらすみません。

    mimosafa様

    重ね重ねご回答くださり、ありがとうございます。

    ご教授いただいた post_class() を使わない方法でやりたいことが
    実現できました。

    途方に暮れていた所に手を差し伸べて頂き、大変感謝しております。
    ありがとうございました。
    プログラムのお奥深さを実感いたしました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタム投稿の記事一覧にtermを用いてClass指定をしたい」には新たに返信することはできません。