トップページでよく見るブログの新着一覧ですが、ブログ全体の投稿(記事)一覧ではなく、特定のカテゴリーだけとか、カテゴリー毎に独立して表示させたいと思うことがあると思います。
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で全件表示)
));
この方法ならカスタム投稿でも通常の投稿でも対応できます。