WordPressで特定のカテゴリを投稿一覧に表示させない2つの方法

シェアする

WordPressでサイトを作成していると、投稿一覧ページに、あるカテゴリのみ表示させたくないということがたまにあります。

例えば、ホームの投稿一覧ページから、特定のカテゴリの記事のみを除外したいという場合、その方法には

1. pre_get_posts関数をフックする方法
2. ループの直前でWP_Queryを利用する方法

の2つの方法が考えられます。

スポンサーリンク
レクタングル大

pre_get_posts関数をフックする方法

pre_get_posts関数をフックする場合、以下のコードをfunctions.php内に記述しましょう。

add_action( 'pre_get_posts', 'modify_query_exclude_category' );
function modify_query_exclude_category( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_home() )
        $query->set( 'cat', '-5' );
}

こちらのコードの場合、「管理画面ではない かつ メインクエリである かつ ホーム画面である」場合に、カテゴリIDが5のカテゴリに属する記事一覧がホームの投稿一覧画面から除外されます。

$query->set( ‘cat’, ‘-5’ );の数字に付いている-(マイナス)は、そのIDを除外するということを示しており、もしマイナスを付けない場合は、そのIDのカテゴリに属する記事のみが表示されるという逆の意味になります。

ループの直前でWP_Queryを利用する方法

WP_Queryを使用する場合は、ループの直前で除外するカテゴリを指定します。

<?php
  if ( is_home() ) {
    $query = new WP_Query( 'cat=-5' );
    if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); 
   }
?>

特定のカテゴリを公開設定にしたままでホームの投稿一覧から除外することができました。

特定のカテゴリの記事を除外する前

before-excluding

特定のカテゴリの記事を除外した後

after-excluding

参考

WordPressでホームやアーカイブ毎に表示条件を変える
関数リファレンス/is main query
ループ 特定のカテゴリを除外する

スポンサーリンク
レクタングル大
レクタングル大

シェアする

フォローする