シングルマザーnolaの生活日記。Web制作の小ネタから、料理、お役立ちグッズ、美容の日記まで広く浅く更新中。

[WP]カスタム投稿タイプ内のカテゴリーごとに記事の一覧を表示する

[2017.07.06]

FAQページを作る時にカスタム投稿タイプ+カテゴリ分けで対応した時の覚書。

  • カスタム投稿タイプ(faq)
  • カスタム投稿タイプの中でさらにカテゴリ分け(ももについて、りんごについて)
  • QuestionにはWPの投稿のタイトルを使用
  • AnswerにはWPの投稿の本文を使用

例えば、faq(post_type)というカスタム投稿タイプがあって、更に「ももについて」「りんごについて」というカテゴリーを作り、記事を投稿していって、全カテゴリー(もも…、りんご…)をループ表示させたいときの覚書。

ももについて ←カテゴリ名

 Q:ももはいつが食べごろですか? ←投稿のタイトル

 A:夏です。 ←投稿の本文
 (QAをくりかえす)

りんごについて ←カテゴリ名

 Q:りんごはいつが食べごろですか? ←投稿のタイトル

 A:冬です。 ←投稿の本文
 (QAをくりかえす) 

 

※この記事ではカスタム投稿タイプの設定の仕方は解説していません。
※カスタム投稿タイプの設定に’hierarchical’ => trueじゃないとだめ

以下がソース

<?php
        // タクソノミ取得
        $catargs = array(
          'taxonomy' => 'faq_category'//(1)
        );
        $catlists = get_categories( $catargs );
        foreach($catlists as $cat) : // 取得したカテゴリの配列でループを回す

        ?>

        <div class="<?php echo $cat->slug; ?>"> 
        <h1><?php echo $cat->name; ?></h1>
        <?php
        $args = array(
          'posts_per_page'   => -1,//(2)マイナス1は全件表示
          'post_type' => 'faq',//(3)
          'faq_category' => $cat->slug,//(4)
          'orderby'          => 'date',//(5)
           'order'          => 'DESC'//(6)降順 新しい日付から古い日付
        );
        $my_posts = get_posts( $args );
        if ( $my_posts ) { // 該当する投稿があったら

          foreach ( $my_posts as $post ) :
            setup_postdata( $post );
            ?>
            <div>
            <h2>Q:<?php the_title(); ?></h2>
            <p>A:<?php the_content(); ?></p>
            </div>
            <?php
          endforeach;
        } else {
          echo 'このカテゴリに投稿はありません';
        }
        wp_reset_postdata();
        ?>

        </div>

        <?php endforeach; ?>

 

図中の(1)から(6)の解説

(1)’taxonomy’ => ‘faq_category’ の faq_category の部分は、 カスタム投稿タイプを設定する時にregister_taxonomy に振った名前を入力 。

(2)投稿の表示件数を入力 -1は全件表示という意味

(3)’post_type’ => ‘faq’ の faqの部分は、 カスタム投稿タイプを設定する時にregister_post_type に振った名前を入力。

(4)’faq_category’ => $cat->slug, の faq_categoryは(1)と同じものに設定。 $cat->slugというのはカテゴリをスラッグ(slug)ごとに取得してね という意味。

(5) ‘orderby’ => ‘date’, 日付順にならべる

(6) ‘order’=> ‘DESC’  降順 新しい日付から古い日付順にならべる

 

カテゴリの表示順を変更したい場合

プラグインの「Category Order and Taxonomy Terms Order」というので表示順を変更できます。

  • LINE

Advertisement

Site Search

Profile

profile

人生のいたずら(笑)でシングルマザーになったnolaです。Web制作をしています。主にコーディングをしていて、他にJS、PHP、WPカスタマイズなども。産休を経て現在はフルタイムでお仕事復帰です!