主な手順
一覧リストで特定カテゴリを除外するのに必要な主な手順は以下です。
- カテゴリ設定ページからカテゴリ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' );
動作確認
上記のカスタマイズを行うことで、以前は以下のように「テスト」カテゴリも表示されていた一覧リストが
以下のように、カテゴリを除外して表示させることができるようになりました。
まとめ
今回のカスタマイズを行うことで、トップページの投稿一覧に表示させたくないカテゴリを非表示にすることができます。
ただ、今回のカスタマイズは、if文の条件分岐が「$query->is_home() && $query->is_main_query()」となっています。ですので、メインクエリのホームページ(トップページのリスト)のみに適用される方法となっています。