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

前回のレッスンWP_Queryの使用例の一覧

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
ループ 特定のカテゴリを除外する

次のレッスンへWorpdressでPC・スマホ・タブレットをPHPを利用して切り替える方法

「WordPress初心者入門」のトップへ

調べても答えが分からない場合にはQ&Aサイト活用がおすすめです

ご自分で調べても答えが出てこない時には、Q&Aサイトを活用しましょう。

WordPressに関する質問でおすすめのQ&Aサイトはteratailです。

teratailはプログラミングに特化していますので、WordPressで難易度の高いカスタマイズに関する質問もしやすく、一般のQ&Aサイトよりも正確な回答が得やすいという特徴があります。

無料で利用ができますので、行き詰まってしまった時には利用いただいても良いでしょう。
エンジニア特化型Q&Aサイト【teratail】

スポンサーリンク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク