WordPressのforeachループで特定のカテゴリ(タクソノミー)の記事を省いて出力する

カテゴリ
WordPress

WordPressのforeachループで特定のカテゴリ(タクソノミー)の記事を省いて出力するのサムネイル

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以外のループ出力と除外

他の方法については、下記リンク先の情報が参考になるかと思います。
アーカイブページなどはこちらで作成すると思います。

プラグインを使わずに特定のカテゴリの記事を除外する

サイトの制作・改修などを
気になってることを質問
 
Twitterやってます♪
DMもお気軽に😊