WordPressで特定のカテゴリーで絞り込んだ投稿一覧ページを作りたい

トップページでよく見るブログの新着一覧ですが、ブログ全体の投稿(記事)一覧ではなく、特定のカテゴリーだけとか、カテゴリー毎に独立して表示させたいと思うことがあると思います。
WordPressには「get_posts()」などの関数が用意されており、簡単に実装することができます。

まずは、カテゴリーのIDを調べましょう

管理画面のカテゴリーの編集画面のURLを見て、tag_IDの番号を調べましょう。

wwww.***********/wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=10&post_type=post

この場合は「tag_ID=10」となっているので、カテゴリーのIDは「10」です。
ここで調べたカテゴリーのIDを使って、このIDに紐づい記事だけを表示させていきます。

テンプレートを編集します

index.phpを参考にすると、カテゴリーIDが「10」の記事のみを表示させるには、下記のようになります。

$arg = array(
  'category' => 10, //カテゴリーIDが10の記事
  'posts_per_page' => 5 //表示記事件数(-1で全件表示)
);
$posts = get_posts($arg);

これで$postsの中に条件が満たされた記事が取得されました。
次にこれを表示します。同じくindex.phpを参考にします。

<div id="primary" class="content-area">
  <div id="content" class="site-content">
  <?php
  $arg = array( 
    'category' => 10, //カテゴリーIDが10の記事
    'posts_per_page' => 5 //表示記事件数
  );
  $posts = get_posts($arg);
  ?>
  <?php
  if ( have_posts() ) ://Start the Loop
    foreach($posts as $post): setup_postdata($post);
      get_template_part( 'content', get_post_format() );
    endforeach;
  wp_reset_postdata();
    twentyfourteen_paging_nav();
  else:
    get_template_part( 'content', 'none' );
  endif;
  ?>
  </div><!-- #content -->
</div><!-- #primary -->

カスタム投稿の場合

カスタム投稿でも同じように、カテゴリーを指定することも可能です。
ただし、通常の投稿とは違い、カスタムタクソノミー(カスタム分類)をカテゴリーとして使うことが多いと思います。
「category」も「post」という投稿タイプのタクソノミーであり、何も指定が無ければ「post」や「category」は他のものより優先される、と考えれば判り易いのではないかと・・・。
ここでは、「tax_query」を使って「投稿タイプ」などより詳細な条件指定します。

$posts = get_posts(
  array(
    'post_type' => '○○○○' , //投稿タイプのスラッグ名○○○○(通常の投稿はpost)
    'tax_query' => array(
        array(
            'taxonomy' => '□□□□' , //カスタムタクソノミー□□□□(通常の投稿はcategory)
            'field' => 'term_id',
            'term' => xx , //カスタムタクソノミー内のタームのterm_ID××
            /*'terms' => array(1,2,3), //複数のタームを選びたい場合*/
        )
    ),
    'posts_per_page' => 5 //表示記事件数(-1で全件表示)
  )
);

カテゴリーのslugで絞り込む

「’field’ => ‘term_id’」を「’field’=>’slug’」にするとスラッグ名でも指定できます。

$posts = get_posts(
  array(
    'post_type' => '○○○○' , //投稿タイプのスラッグ名○○○○(通常の投稿はpost)
    'tax_query' => array( array(
    'taxonomy' => '□□□□' , //カスタムタクソノミー□□□□(通常の投稿はcategory)
    'field' => 'slug',
    'term' => '××××' , //カスタムタクソノミー内のタームスラッグ××××
    /*'terms' => array( 'aaa','bbb','ccc' ), //複数のタームを選びたい場合)*/
  )),
  'posts_per_page' => 5 //表示記事件数(-1で全件表示)
));

この方法ならカスタム投稿でも通常の投稿でも対応できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です