博客优化

WordPress怎么禁用wp-sitemap里的指定页面?

publish-date 2024-06-30
update-date 2024-11-16
# WordPress

契机

找回了消失的custom HTML block后,昨天手痒做了个工具页面出来,顺便把导航和关于页面完善了下。好不容易搞完,烦恼又一刻不停歇地找上了我:
站点地图的作者是终于禁用掉了,可是这些about、nav、tool什么的我也是一个都不想被抓取啊!

怎么禁用全部页面?

把下面代码粘贴进functions.php的末尾,保存

// 禁用wp-sitemap所有页面
add_filter(
'wp_sitemaps_post_types',
function( $post_types ) {
unset( $post_types['page'] );
return $post_types;
}
);

效果图

wp-sitemap-posts-page-1.xml站点地图索引整个都没了,包括里面的所有page页面

remove-all-page-from-wp-sitemap

怎么禁用指定页面?

按照下面的代码说明把我的代码改成你需要的版本后,再粘贴进functions.php的末尾,保存

// 禁用wp-sitemap指定页面
function disable_sitemap_specific_page($args, $post_type) {
if ('page' !== $post_type) return $args;
$args['post__not_in'] = isset($args['post__not_in']) ? $args['post__not_in'] : array();
$args['post__not_in'][] = 542; // about
$args['post__not_in'][] = 3189; // nav
$args['post__not_in'][] = 4441; // tool
$args['post__not_in'][] = 4466; // kaze-quotes
return $args;
}
add_filter('wp_sitemaps_posts_query_args', 'disable_sitemap_specific_page', 10, 2);

代码说明

  1. “// 禁用sitemap指定页面”和“// about”这种双斜杠后带文字的样子的是注释的意思,可以把这块删掉,也可以把文字改成自己方便的备注,不影响代码的正常运行的
  2. 指定页面时需要用到的是页面的ID(上面542这种样子),而不是页面slug(about这种样子)
    怎么知道页面的ID是多少?知道后,就把你自己的数字换进上面的代码
  3. 我在上面禁用了4个页面,所以有4行 $args[‘post__not_in’][] =
    你根据自己的实际需求来,多删少加
  4. 不需要同时禁用全部页面和指定页面,选一段代码实现你的目的即可
  5. 官方的示例代码对我无效,上面的代码是参考souseful.cc里的改的,至少对我有效

效果图

wp-sitemap-posts-page-1.xml站点地图索引还在,点进去只有指定的页面不显示了

remove-specific-page-from-wp-sitemap

参考资料

New XML Sitemaps Functionality in WordPress 5.5
如何从WordPress的wp-sitemap.xml中排除特定的帖子?