【WordPress】記事一覧から特定のカテゴリを除外する方法

  • 投稿 : 2015-09-04
特定のカテゴリのスラッグを「n」とします。

・カテゴリー「n」の記事一覧は表示する
・トップページの記事一覧から、カテゴリー「n」の記事は除外する
・その他のカテゴリーでは、カテゴリー「n」の記事は除外する
・年月アーカイブからカテゴリー「n」の記事は除外する
・検索結果からカテゴリー「n」の記事は除外する

こんな動作をさせたいときは、以下のようなロジックをテーマのfunctions.phpに追記すると簡単にできます。

//------------------------------------
// 特定のカテゴリー[n]を除外する
//
//------------------------------------
function exclude_category_filter( $query ) {
   if ( is_admin() || ! $query->is_main_query() ){
	   return $query;
   }

   //カテゴリーslugからIDへ
   $cat_id = get_category_by_slug('n')->term_id;

   //カテゴリー一覧の「n」は表示する
   if ( is_archive() && is_category('n') ) {
	   return $query;
   }

   //ホーム画面から除く
   if ($query->is_home() ) {
       $query->set('category__not_in', array($cat_id));
    }

   //アーカイブから除く
   if ($query->is_archive()) {
       $query->set('category__not_in', array($cat_id));
    }

   //検索結果から除く
   if ($query->is_search()) {
       $query->set('category__not_in', array($cat_id));
    }

    return $query;
}
add_action( 'pre_get_posts', 'exclude_category_filter' );

わざと分けて書いているので、わかりやすくなっているかと思います。
必要ない部分は削除するなり、また必要なら追加することで、たいていのことには対応できるかと思います。


■関数リファレンス
関数リファレンス/is main query - WordPress Codex 日本語版
関数リファレンス/is home - WordPress Codex 日本語版
関数リファレンス/is archive - WordPress Codex 日本語版
関数リファレンス/is search - WordPress Codex 日本語版

■参考
WordPress › Support » Exclude post with category A, but not with A and B
続・WordPressの検索をカスタマイズしてみた | notnil creation weblog
条件分岐タグ - WordPress Codex 日本語版

スポンサーリンク