トップページから一部の記事を除外する

特定カテゴリに属する記事をトップページに表示しない

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を調べることが出来ます。

投稿 → カテゴリー

で、個々のカテゴリーを編集するページを表示することが出来ます。

category-id-search

画像でオレンジ色を引いた部分に、カテゴリIDが表示されます。