WordPress5.5から追加されたサイトマップ機能によって生成されるwp-sitemap.xmlから、特定のURLを除外したいというケースは結構あるかと思います。
そこで、投稿タイプ・タクソノミー・著者別アーカイブを除外する方法をそれぞれご紹介したいと思います。
WordPressが自動生成するサイトマップから特定のURLを除外する方法
特定の投稿タイプを除外
特定の投稿タイプを除外したい場合は、適用しているテーマのfunctions.phpに以下を追記します。
add_filter (
'wp_sitemaps_post_types',
function( $post_types ) {
unset( $post_types['投稿タイプ名'] );
return $post_types;
}
);
例えば、固定ページとnewsというカスタム投稿を除外したい場合は、以下のように記述します。
add_filter (
'wp_sitemaps_post_types',
function( $post_types ) {
unset( $post_types['page'] );
unset( $post_types['news'] );
return $post_types;
}
);
このように、除外したい投稿タイプの分「unset( $post_types[‘投稿タイプ名’] );」を追加します。
参考:【WordPress】XMLサイトマップ生成機能で特定の投稿タイプを除外する方法
特定のタクソノミーを除外
特定のタクソノミーを除外したい場合は、以下のように記述します。
add_filter (
'wp_sitemaps_taxonomies',
function( $taxonomies ) {
unset( $taxonomies['タクソノミー名'] );
return $taxonomies;
}
);
例えば、タグとnews_catというタクソノミーを除外したい場合は、以下のようにします。
add_filter (
'wp_sitemaps_taxonomies',
function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['news_cat'] );
return $taxonomies;
}
);
参考:【WordPress】XMLサイトマップ生成機能でカテゴリーやタグを除外する方法
著者別アーカイブを除外
著者別アーカイブを除外したい場合は、以下のように記述します。
add_filter (
'wp_sitemaps_add_provider',
function( $provider, $name ) {
if ( 'users' === $name ) {
return false;
}
return $provider;
},
10,2
);
特定ユーザーの著者別アーカイブを除外
特定ユーザーの著者別アーカイブのみを除外したい場合は、以下のようにします。
add_filter (
'wp_sitemaps_users_entry',
function ( $sitemap_entry, $user ) {
if ( 'ユーザー名' === $user->data->user_login ) {
return [];
}
return $sitemap_entry;
},
10,2
);
参考:【WordPress】XMLサイトマップ生成機能で投稿者別サイトマップを削除する方法
あとがき
サイトマップから特定のURLを除外したい時は、上述した方法で削除しちゃいましょう。
とはいえ、wp-sitemap.xmlは無効化して、サイトマップはプラグインを使って生成した方が随分と楽ですね。WordPressが生成するサイトマップ自体が不要な場合は、「WordPress5.5から追加されたXMLサイトマップ機能を無効化する方法」をご参照ください。