
サブメニューのフォーラムに「トップページの新着記事一覧から特定のカテゴリーを除外して表示する方法」についての質問がいくつかありました。
カテゴリーに関してなのですがトップページの投稿で特定のカテゴリのみ非表示にする方法はありますか?
例えばカテゴリーがA,B,C,Dあるとします。
記事を投稿するとトップページとそれぞれのカテゴリーページに記事が投稿されますが、Dのみトップページに投稿されないという感じです。
Dのカテゴリーには記事が投稿されてトップページのみ非表示でトップページはA,B,Cにしたいです。
こういった質問は、他にもこれまでいくつかあったので、ある程度需要のあるカスタマイズなのかと思い、その方法を記しておきたいと思います。
目次
主な手順

一覧リストで特定カテゴリを除外するのに必要な主な手順は以下です。
- カテゴリ設定ページからカテゴリIDを取得する
- functions.phpに除外するためのコードを記入する
今回のカスタマイズは、テンプレートファイル自体はカスタマイズする必要がなく、テーマ(子テーマ)のfunctions.phpにほぼコピペで追記するだけなので、比較的簡単なカスタマイズかと思います。
カテゴリ設定ページからカテゴリIDを取得する
今回は、トップページリストから以下のような、「テスト」というカテゴリを除外するのを例に説明します。
まずは、Wordpress管理画面から「投稿→カテゴリ」を選択して「カテゴリの設定」画面を表示します。

カテゴリ一覧が表示されるので、その中から「除外したいカテゴリ」をひらきます。
すると、ブラウザのアドレスバーに以下のようなアドレスが表示されるかと思います。
その中に、「tag_id=[数字]」という表記があるので、数字をメモっておきます。
除外したいカテゴリが複数ある場合は、全てのカテゴリIDを同様の手順でメモっておいてください。
functions.phpに除外するためのコードを記入する
除外するカテゴリIDを取得したら、functions.phpにpre_get_postsフックを用いて除外IDを設定します。
とりあえず難しく考える必要なく、以下のコードをテーマ(子テーマ)のfunctions.phpに追記する形でコピペしてください。
//特定のカテゴリの除外
function exclude_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-17' );//マイナスをつけてカテゴリIDを除外する
}
}
add_action( 'pre_get_posts', 'exclude_category' );
そして、$query->setの2番目の引数部分に、マイナスをつける形で「除外するカテゴリID」を指定してください。上記の例だと、’-17’の部分になります。
除外カテゴリが複数ある場合
除外したいカテゴリが複数ある場合は、以下のように,(カンマ)で区切る形で指定してください。
//特定のカテゴリの除外
function exclude_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-17,-28,-132' );//マイナスをつけてカテゴリIDを除外する
}
}
add_action( 'pre_get_posts', 'exclude_category' );
参考 プラグイン API/アクションフック一覧/pre get posts – WordPress Codex 日本語版
動作確認
上記のカスタマイズを行うことで、以前は以下のように「テスト」カテゴリも表示されていた一覧リストが
以下のように、カテゴリを除外して表示させることができるようになりました。
まとめ
今回のカスタマイズを行うことで、トップページの投稿一覧に表示させたくないカテゴリを非表示にすることができます。
ただ、今回のカスタマイズは、if文の条件分岐が「$query->is_home() && $query->is_main_query()」となっています。ですので、メインクエリのホームページ(トップページのリスト)のみに適用される方法となっています。
その他の条件分岐を指定するには、以下などが参考になるかと思います。
というわけで「トップページリストには表示したくない投稿を書きたい」とか「メインクエリの表示条件をカスタマイズしたい」なんて場合は、今回の方法が参考になれば幸いです。
とっても参考になりました
除外するカテゴリーがたくさんあり
特定のカテゴリーだけ表示するには
どうすればよいのでしょうか?