・カテゴリー「n」の記事一覧は表示する
・トップページの記事一覧から、カテゴリー「n」の記事は除外する
・その他のカテゴリーでは、カテゴリー「n」の記事は除外する
・年月アーカイブからカテゴリー「n」の記事は除外する
・検索結果からカテゴリー「n」の記事は除外する
こんな動作をさせたいときは、以下のようなロジックをテーマのfunctions.phpに追記すると簡単にできます。
//------------------------------------
// 特定のカテゴリー[n]を除外する
//
//------------------------------------
function exclude_category_filter( $query ) {
if ( is_admin() || ! $query->is_main_query() ){
return $query;
}
//カテゴリーslugからIDへ
$cat_id = get_category_by_slug('n')->term_id;
//カテゴリー一覧の「n」は表示する
if ( is_archive() && is_category('n') ) {
return $query;
}
//ホーム画面から除く
if ($query->is_home() ) {
$query->set('category__not_in', array($cat_id));
}
//アーカイブから除く
if ($query->is_archive()) {
$query->set('category__not_in', array($cat_id));
}
//検索結果から除く
if ($query->is_search()) {
$query->set('category__not_in', array($cat_id));
}
return $query;
}
add_action( 'pre_get_posts', 'exclude_category_filter' );
わざと分けて書いているので、わかりやすくなっているかと思います。
必要ない部分は削除するなり、また必要なら追加することで、たいていのことには対応できるかと思います。
■関数リファレンス
・関数リファレンス/is main query - WordPress Codex 日本語版
・関数リファレンス/is home - WordPress Codex 日本語版
・関数リファレンス/is archive - WordPress Codex 日本語版
・関数リファレンス/is search - WordPress Codex 日本語版
■参考
・WordPress › Support » Exclude post with category A, but not with A and B
・続・WordPressの検索をカスタマイズしてみた | notnil creation weblog
・条件分岐タグ - WordPress Codex 日本語版
スポンサーリンク
コメントを残す