WordPressトップの一覧リストの中から特定のカテゴリを除外するカスタマイズ方法

サイバーマンデー
Amazonプライム会員限定の大セール「サイバーマンデー」開催中!プライム会員限定の大セール

サブメニューのフォーラムに「トップページの新着記事一覧から特定のカテゴリーを除外して表示する方法」についての質問がいくつかありました。

カテゴリーに関してなのですがトップページの投稿で特定のカテゴリのみ非表示にする方法はありますか?
例えばカテゴリーがA,B,C,Dあるとします。
記事を投稿するとトップページとそれぞれのカテゴリーページに記事が投稿されますが、Dのみトップページに投稿されないという感じです。
Dのカテゴリーには記事が投稿されてトップページのみ非表示でトップページはA,B,Cにしたいです。

こういった質問は、にもこれまでいくつかあったので、ある程度需要のあるカスタマイズなのかと思い、その方法を記しておきたいと思います。

スポンサーリンク
レクタングル(大)広告

主な手順

一覧リストで特定カテゴリを除外するのに必要な主な手順は以下です。

  • カテゴリ設定ページからカテゴリIDを取得する
  • functions.phpに除外するためのコードを記入する

今回のカスタマイズは、テンプレートファイル自体はカスタマイズする必要がなく、テーマ(子テーマ)のfunctions.phpにほぼコピペで追記するだけなので、比較的簡単なカスタマイズかと思います。

カテゴリ設定ページからカテゴリIDを取得する

今回は、トップページリストから以下のような、「テスト」というカテゴリを除外するのを例に説明します。

一覧リストからテストカテゴリを除外する

まずは、Wordpress管理画面から「投稿→カテゴリ」を選択して「カテゴリの設定」画面を表示します。

Wordpress管理画面からカテゴリ設定項目の表示

カテゴリ一覧が表示されるので、その中から「除外したいカテゴリ」をひらきます。

カテゴリ一覧から除外したいカテゴリを開く

すると、ブラウザのアドレスバーに以下のようなアドレスが表示されるかと思います。

カテゴリを選択したアドレスバーの表示

その中に、「tag_id=[数字]」という表記があるので、数字をメモっておきます。

tag_idのアドレスバーでの表示

除外したいカテゴリが複数ある場合は、全てのカテゴリIDを同様の手順でメモっておいてください。

functions.phpに除外するためのコードを記入する

除外するカテゴリIDを取得したら、functions.phpにpre_get_postsフックを用いて除外IDを設定します。

とりあえず難しく考える必要なく、以下のコードをテーマ(子テーマ)のfunctions.phpに追記する形でコピペしてください。

そして、$query->setの2番目の引数部分に、マイナスをつける形で「除外するカテゴリID」を指定してください。上記の例だと、’-17’の部分になります。

除外カテゴリが複数ある場合

除外したいカテゴリが複数ある場合は、以下のように,(カンマ)で区切る形で指定してください。

参考 プラグイン API/アクションフック一覧/pre get posts – WordPress Codex 日本語版

動作確認

上記のカスタマイズを行うことで、以前は以下のように「テスト」カテゴリも表示されていた一覧リストが

一覧リストからカテゴリを除外する前

以下のように、カテゴリを除外して表示させることができるようになりました。

トップページの一覧リストでカテゴリ除外した結果

まとめ

今回のカスタマイズを行うことで、トップページの投稿一覧に表示させたくないカテゴリを非表示にすることができます。

ただ、今回のカスタマイズは、if文の条件分岐が「$query->is_home() && $query->is_main_query()」となっています。ですので、メインクエリのホームページ(トップページのリスト)のみに適用される方法となっています。

その他の条件分岐を指定するには、以下などが参考になるかと思います。

というわけで「トップページリストには表示したくない投稿を書きたい」とか「メインクエリの表示条件をカスタマイズしたい」なんて場合は、今回の方法が参考になれば幸いです。

『WordPressトップの一覧リストの中から特定のカテゴリを除外するカスタマイズ方法』へのコメント

  1. 名前:ハックション 投稿日:2016/08/18(木) 07:52:01 ID:11a2b3bd3

    とっても参考になりました

    除外するカテゴリーがたくさんあり
    特定のカテゴリーだけ表示するには
    どうすればよいのでしょうか?

  2. わいひら 名前:わいひら 投稿日:2016/08/18(木) 12:17:45 ID:d03bcdf81

    特定のカテゴリのみを表示するには、マイナスを削除すればいけると思います。
    複数指定する場合は、マイナスをつけないでカンマ区切りでカテゴリIDを複数指定すればOKかと思います。
    詳しくは、ホームページ上に唯一のカテゴリーを表示の部分を参照してみてください。