特定カテゴリに属する記事をトップページに表示しない
2種類のやり方
WordPressのトップページで、一部のカテゴリに属する記事を非表示にします。
記事を除外するための2種類のやり方を検証してみました。2種類の方法とは、
- アクションフックを使う方法
- テーマ側に除外処理を追加する方法
です。
アクションフックを使用する方法では、具体的には
pre_get_postsアクション
を利用して、データベースに対するクエリ発行前に、クエリのパラメータを調整し、一部のカテゴリに属する記事を除外する方法になります。
別の方法として、テーマ側でクエリパラメータを調整することも可能です。その場合には、テーマ内で
query_posts関数
を使って、データベースに対するクエリを微調整します。
pre_get_postsアクション
PHPコード
WordPressのpre_get_postsアクションフックを利用して、トップページから一部のカテゴリに属する記事を除外するコードです。以下のPHPコードをfunctions.phpに追記することで、特定のカテゴリに属する記事を非表示することが出来ます。
function excluded_some_posts($query) { if ($query->is_home() && $query->is_main_query()) { $query->set('category__not_in', array(2)); } } add_action('pre_get_posts', 'excluded_some_posts');
category__not_inパラメータを利用して、引数にカテゴリIDを指定することで、一部の記事を除外することが可能です。
別の書き方として、
$query->set('cat', '-2');
カテゴリIDにマイナスを追加して除外することが出来ます。
複数のパラメータ
複数のカテゴリIDを指定する必要がある場合のPHPコードは、それぞれ以下の通りです。
$query->set('category__not_in', array(2, 5));
$query->set('cat', '-2, -5');
query_posts関数
functions.phpではなく、テーマ側の構成ファイルでクエリを調整することが可能です。
テーマの構成ファイルは、選択しているテーマによって微妙に異なりますが、WordPressの公式テーマ:Twenty Thirteenの場合は、
index.php
を調整することで、トップページから特定のカテゴリに属する記事を除外可能です。具体的には、以下のコードを追加します。
if( is_home() ) { global $query_string; query_posts($query_string . '&category__not_in=2'); }
query_posts関数を使ってデータベースに発行するクエリを調整することが出来ます。別の書き方として、
query_posts($query_string . '&cat=-2');
catパラメータを使って除外することが可能です。
カテゴリIDの調べ方
WordPressの管理画面内でカテゴリIDを調べることが出来ます。
投稿 → カテゴリー
で、個々のカテゴリーを編集するページを表示することが出来ます。
画像でオレンジ色を引いた部分に、カテゴリIDが表示されます。