WordPressのforeachループで特定のカテゴリ(タクソノミー)の記事を省いて出力する
- カテゴリ
- WordPress
WordPressのforeachループで、特定のカテゴリ(タクソノミー)の記事を省いて出力する方法です。
WP_Queryでのでの除外は多く見かけたのですが、foreachの例が見当たらなかったので昨日の自分に宛てて記載します。
foreachのループ例
やり方は色々あると思いますが、このような書き方も多いと思います。
global $post;
$posts = get_posts(array(
'post_type' => 'custom_posttype_name', //カスタム投稿のスラッグ
'orderby' => 'rand', //ランダムに出力。titleとしorder=>descとするとタイトル降順になる
'posts_per_page' => '10', //1ページに表示させる記事数
'post_status' => 'publish', //公開状態
))
foreach( $posts as $post ):
echo the_title();
endforeach;
get_postsのフィルタについては、他の設定項目もたくさんあります。
こちらからご確認ください。
テンプレートタグ/get posts
特定のカテゴリの記事を除外する
例えばカスタム投稿(customposttypename)の記事一覧の中で、カテゴリ(excluded-cat)を持つ記事を除外して出力したい場合は下記のように書きます。
global $post;
$posts = get_posts(array(
'post_type' => 'custom_posttype_name',
'orderby' => 'rand',
'posts_per_page' => '10',
'post_status' => 'publish',
'tax_query' => array( //カテゴリのフィルタをかけられます
array(
'taxonomy' => 'cpt-cat', //タクソノミーのスラッグ
'field' => 'slug',
'terms' => 'excluded-cat', //カテゴリのスラッグ
'operator' => 'NOT IN', //これで除外することを指定
),
),
))
foreach( $posts as $post ):
echo the_title();
endforeach;
tax_query関数を使用して、excluded-catの記事を除外するよう設定しています。
ちなみに、逆に特定のカテゴリに絞って記事を出力する場合は、
下記のようにoperatorを外してあげるだけです。
global $post;
$posts = get_posts(array(
'post_type' => 'custom_posttype_name',
'orderby' => 'rand',
'posts_per_page' => '10',
'post_status' => 'publish',
'tax_query' => array( //カテゴリのフィルタをかけられます
array(
'taxonomy' => 'cpt-cat', //タクソノミーのスラッグ
'field' => 'slug',
'terms' => 'excluded-cat', //カテゴリのスラッグ
),
),
))
foreach( $posts as $post ):
echo the_title();
endforeach;
foreach以外のループ出力と除外
他の方法については、下記リンク先の情報が参考になるかと思います。
アーカイブページなどはこちらで作成すると思います。
プラグインを使わずに特定のカテゴリの記事を除外する