WordPressサイトで、特定のカテゴリの投稿を一覧から除外したい場合があります。たとえば、「未分類」カテゴリーを表示させたくない場合や、特定のカテゴリだけを非表示にしたいケースです。この記事では、WP_Query
を使った簡単な方法をご紹介します。
特定のカテゴリを除外する基本的な方法
WP_Query
を使用することで、簡単に特定のカテゴリを除外できます。以下はその基本的なコード例です。
PHP
$args = array(
'post_type' => 'post', // 投稿タイプを指定(デフォルト投稿)
'posts_per_page' => 10, // 表示する投稿数
'tax_query' => array(
array(
'taxonomy' => 'category', // タクソノミーを指定(カテゴリーの場合は 'category')
'field' => 'slug', // スラッグで指定
'terms' => array('exclude-category-slug'), // 除外したいカテゴリのスラッグ
'operator' => 'NOT IN' // 除外条件
)
)
);
$query = new WP_Query($args);
taxonomy
'category'
を指定して、カテゴリーに関連した投稿を操作します。terms
除外するカテゴリのスラッグ(例:'exclude-category-slug'
)を記載します。operator
NOT IN
を指定すると、そのカテゴリに属する投稿を除外します。
コードの利用例
このコードをテンプレートファイルに追加して利用します。以下は、投稿一覧を表示する際に特定のカテゴリを除外する例です。
PHP
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array('news', 'events'), // 除外したいカテゴリのスラッグ
'operator' => 'NOT IN'
)
)
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php
endwhile;
wp_reset_postdata();
else :
echo '<p>投稿がありません。</p>';
endif;
?>
上記コードでは、news
と events
カテゴリに属する投稿が除外されます。
注意点
- 複数のカテゴリを除外する場合
terms
に配列で複数のスラッグを渡せば、複数カテゴリの投稿を除外できます。phpコードをコピーする'terms' => array('category-slug1', 'category-slug2'),
- 管理画面でスラッグを確認する方法
除外したいカテゴリのスラッグは、管理画面の「投稿 > カテゴリ」から確認できます。 - デフォルトクエリの変更について
上記のコードはカスタムクエリですが、テーマやプラグインの影響を受ける場合は、pre_get_posts
フィルターを利用してデフォルトクエリを変更することもできます。
まとめ
WP_Query
を活用すれば、特定のカテゴリを簡単に除外できます。カテゴリスラッグを正確に指定することで、サイトの投稿一覧を思い通りにカスタマイズできます。ぜひ試してみてください!