サイトを作っていると公開したけれど新着一覧には出したくない記事というのもたまに出てきます。そんな時には、メインループから特定カテゴリーを除外する記述をするとさくっと実現することが出来ます。
手順をざっと書いておきます。
除外用のカテゴリーを作る
管理画面から除外用のカテゴリーを一つ作りましょう。名前はわかりやすければ何でも良いと思います。
function.phpをカスタマイズ
pre_get_postsでメインループをカスタマイズします。考え方は「指定カテゴリーの除外」を希望するページのメインループに組み込む、という感じです。クエリにカテゴリーの除外を設定するのはカテゴリーidに「-」を付けます。
※function.phpいじるのに慣れてない方は、記述間違えると画面真っ白になったりするのでお気をつけて。
function myPreGetPosts( $query ) {
if ( $query -> is_home() ) {
// 除外するカテゴリーのslugからカテゴリーidを取得。
$hidden_id = get_category_by_slug("hidden");
$hidden_id = $hidden_id->cat_ID;
// 除外指定のための「-」を繋げる。
$hidden_id = '-'.$hidden_id;
$query->set('cat', $hidden_id);
}
}
add_action('pre_get_posts','myPreGetPosts');
今回のサンプルではis_homeを使ってトップのメインループにだけカテゴリーの除外を設定しています。この書き方だとトップ以外のページでのループでは除外カテゴリーの記事も表示されます。
これを全てのページで除外させるにはif文の外側に除外カテゴリー設定の記述を持って来ればOKです。
※ちなみに除外カテゴリーのslugからidを取得してるのは、idを直接指定するよりslugから探した方が管理上楽なことが多いからです。
プラグインもある
functionとかいじりたくないって場合にはUltimate Category Excluderというプラグインで細かく設定も出来るようですね。
本当によくわかるWordPressの教科書 改訂2版 はじめての人も、挫折した人も、本格サイトが必ず作れる