<?php
/**
* 特定のカテゴリに関連する各種ページにnoindexを設定する
*
* @param int|array $category_ids 対象のカテゴリID(単一の数値または配列)
* @return void
*/
function set_category_noindex($category_ids) {
//配列でない場合は配列に変換
if (!is_array($category_ids)) {
$category_ids = array($category_ids);
}
//フックの追加
add_action('wp_head', function () use ($category_ids) {
$should_noindex = false;
//カテゴリーアーカイブページの判定
if (is_category($category_ids)) {
$should_noindex = true;
}
//投稿ページ、固定ページ、カスタム投稿タイプの判定
elseif (is_singular()) {
//投稿ページの場合
if (is_single() && has_category($category_ids)) {
$should_noindex = true;
}
//カスタム投稿タイプの場合
elseif (is_singular(array('your_custom_post_type'))) { //カスタム投稿タイプ名を指定
$terms = wp_get_post_terms(get_the_ID(), 'category');
foreach ($terms as $term) {
if (in_array($term->term_id, $category_ids)) {
$should_noindex = true;
break;
}
}
}
}
//タグ・年月日アーカイブページで、指定カテゴリの投稿を含む場合
elseif (is_archive() && !is_category()) {
global $wp_query;
foreach ($wp_query->posts as $post) {
if (has_category($category_ids, $post)) {
$should_noindex = true;
break;
}
}
}
//noindexの出力
if ($should_noindex) {
echo '<meta name="robots" content="noindex" />';
}
});
}
//noindexにしたいカテゴリIDを定義
$noindex_categories = array(1, 2, 3, 9);
//関数を実行
set_category_noindex($noindex_categories);
このコードの特徴と使い方について説明します:
機能
- 特定のカテゴリに属する以下のページにnoindexを設定します:
- カテゴリアーカイブページ
- 投稿ページ
- カスタム投稿タイプページ
- タグ・日付アーカイブページ(指定カテゴリの投稿を含む場合)
- 特定のカテゴリに属する以下のページにnoindexを設定します:
使い方
- 単一のカテゴリの場合:
set_category_noindex(123); - 複数のカテゴリの場合:
set_category_noindex(array(123, 456, 789));
- 単一のカテゴリの場合:
カスタマイズ
- カスタム投稿タイプの場合は、
your_custom_post_typeの部分を実際のカスタム投稿タイプ名に変更してください。 - 複数のカスタム投稿タイプがある場合は、配列で指定できます:
array('post_type1', 'post_type2')
- カスタム投稿タイプの場合は、
注意点
- カテゴリIDは数値で指定する必要があります(スラッグではありません)
- functions.phpに追加して使用してください
- パフォーマンスに考慮して、必要最小限の判定のみを行うように設計されています

