WordPress5.5默认地图(sitemap)使用教程
[重要通告]如您遇疑难杂症,本站支持知识付费业务,扫右边二维码加博主微信,可节省您宝贵时间哦!
WordPress 5.5开始官方内置了站点地图,那么WordPress 5.5的内置网站地图怎么使用呢?若不想使用它该怎么操作呢?下面一起来看看官方文档的解释。注:如果不需要,建议禁用此功能。
完全禁用所有WP网站地图
您可以通过在functions.php
文件向主题模板或子主题添加同一行代码来彻底禁用WP自带的站点地图功能:
add_filter('wp_sitemaps_enabled', '__return_false');
在这里所做的只是向过滤器挂钩wp_sitemaps_enabled
返回的值false
,就可以禁用了。注意:如果您更新WordPress常规设置以阻止搜索引擎将您的网站编入索引,则站点地图将被自动禁用。因此,在那种情况下,无需使用任何插件或代码来禁用它。
禁用用户站点地图
对于大多数网站来说,排除/禁用整个用户站点地图以帮助提高安全性可能是一个好主意。以下是实现该功能的代码:
// disable users sitemap function shapeSpace_disable_sitemap_users($provider, $name) { return ($name == 'users') ? false : $provider; } add_filter('wp_sitemaps_add_provider', 'shapeSpace_disable_sitemap_users', 10, 2);
此代码段无需编辑。只需添加到您的WordPress主题functions.php
功能即可。
禁用文章类型站点地图
默认情况下,WordPress站点地图包括每种(非空)文章类型的站点地图;对于典型的WordPress网站,这意味着站点地图将包含指向以下站点地图的链接:
URL https://example.com/wp-sitemap-posts-post-1.xml https://example.com/wp-sitemap-posts-page-1.xml 以及任何自定义文章类型:
https://example.com/wp-sitemap-posts-movie-1.xml https://example.com/wp-sitemap-posts-book-1.xml
因此,要排除任何“文章”类型的站点地图,请将以下代码添加到您的主题(或简单的插件)中:
// disable post type sitemap function shapeSpace_disable_sitemap_post_types($post_types) { unset($post_types['page']); // 可以修改page为你需要的自定义文章类型 return $post_types; } add_filter('wp_sitemaps_post_types', 'shapeSpace_disable_sitemap_post_types');
如所写,该代码禁用了page文章类型。因此,您可以将其更改为您要排除的任何文章类型。只需更换page您的文章类型名称(如post,movie,book,等)。
禁用分类法站点地图
默认情况下,WordPress网站地图包含每个(非空)分类法的网站地图。对于典型的WordPress网站,这意味着您的站点地图将包含指向以下站点地图的链接:
URL https://example.com/wp-sitemap-taxonomies-category-1.xml https://example.com/wp-sitemap-taxonomies-post_tag-1.xml
以及任何自定义分类法:
https://example.com/wp-sitemap-taxonomies-color-1.xml https://example.com/wp-sitemap-taxonomies-shape-1.xml
因此,要排除任何“分类”站点地图,请在主题(或简单插件)中添加以下代码:
// disable taxonomy sitemap function shapeSpace_disable_sitemap_taxonomy($taxonomies) { unset($taxonomies['post_tag']); // can be post_tag, category, post_format, or any taxonomy return $taxonomies; } add_filter('wp_sitemaps_taxonomies', 'shapeSpace_disable_sitemap_taxonomy');
如所写,该代码禁用了post_tag分类法。因此,您可以将其更改为要排除的任何分类法。只需更换post_tag你的分类的名称(例如category,post_format,color,book,等)。
从站点地图中排除特定页面
要从WordPress网站地图中排除特定页面,请应用以下代码技术:
// disable specific page function shapeSpace_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'][] = 2; // exclude page with ID = 2 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_page', 10, 2);
注意函数中的第一行,它检查$post_type是否为page。这告诉函数不要执行任何操作,除非当前的帖子类型是“页面”。因此,要从其他文章类型中排除文章,请更改page为要定位的任何文章类型的名称。
函数中的第二行检查以确保post__not_in已设置变量。然后第三行是动作发生的地方。在编写代码时,该代码排除了ID等于2的页面。因此,您可以将该ID更改为要从站点地图中排除的任何页面ID。
要排除多个页面,上述技术将是相同的,但是增加了更多的“排除”行:
// disable specific pages function shapeSpace_disable_sitemap_specific_pages($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'][] = 2; // exclude page with ID = 2 $args['post__not_in'][] = 3; // exclude page with ID = 3 $args['post__not_in'][] = 4; // exclude page with ID = 4 $args['post__not_in'][] = 5; // exclude page with ID = 5 $args['post__not_in'][] = 6; // exclude page with ID = 6 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_pages', 10, 2);
编写此代码的方法可能更短一些,但是为了清楚起见,我将其按原样呈现。
从站点地图中排除特定文章
与以前的技术类似,要从自动生成的WordPress网站地图中排除特定的文章,请执行以下操作:
// disable specific post function shapeSpace_disable_sitemap_specific_post($args, $post_type) { if ('post' !== $post_type) return $args; $args['post__not_in'] = isset($args['post__not_in']) ? $args['post__not_in'] : array(); $args['post__not_in'][] = 1; // exclude post with ID = 1 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_post', 10, 2);
和以前一样。仅在此处注意函数中的第一行,我们正在检查a是否$post_type等于post。然后魔术发生在第三行,我们排除了ID等于1的文章(著名的“ Hello World”文章)。因此,将该ID更改为您要排除并完成的任何文章。
要排除多个帖子,上述技术将是相同的,但是增加了更多的“排除”行:
// disable specific posts function shapeSpace_disable_sitemap_specific_posts($args, $post_type) { if ('post' !== $post_type) return $args; $args['post__not_in'] = isset($args['post__not_in']) ? $args['post__not_in'] : array(); $args['post__not_in'][] = 1; // exclude post with ID = 1 $args['post__not_in'][] = 2; // exclude post with ID = 2 $args['post__not_in'][] = 3; // exclude post with ID = 3 $args['post__not_in'][] = 4; // exclude post with ID = 4 $args['post__not_in'][] = 5; // exclude post with ID = 5 return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_specific_posts', 10, 2);
这一切都非常简单,这要归功于WordPress核心开发人员,他们为我们提供了非常灵活的API,可以自定义。
根据元字段排除文章
也可以根据其附加的元数据排除特定的文章。例如,如果您的文章有一个名为sitemap
的元字段。并且您只想包含sitemap
值为1
的文章。添加以下代码以使其实现:
// disable post based on meta field function shapeSpace_disable_sitemap_post_meta($args, $post_type) { if ('post' !== $post_type) return $args; // can be any post type $args['meta_query'] = isset($args['meta_query']) ? $args['meta_query'] : array(); $args['meta_query'][] = array( 'key' => 'sitemap', // can be any meta key 'value' => '1', // can be any meta value 'compare' => '=', // can use any comparison ); return $args; } add_filter('wp_sitemaps_posts_query_args', 'shapeSpace_disable_sitemap_post_meta');
对于这项技术,我们再次使用wp_sitemaps_posts_query_args过滤器挂钩。可以修改该技术以匹配几乎任何文章集。查看Meta API,以更好地了解可能发生的情况。
检查站点地图是否已启用
正如前面所述,在WordPress可以很容易地禁用/启用的站点地图功能。因此,如果您要自定义内容,了解站点上是否启用了WP Sitemaps可能会很有用。这是执行此操作的代码:
if (wp_sitemaps_get_server()->sitemaps_enabled()) { // sitemaps enabled } else { // sitemaps not enabled }
此代码使用wp_sitemaps_get_server()调用该sitemaps_enabled方法,该方法返回一个值,如果启用了站点地图则返回true,反之返回false。重要提示:所有此站点地图功能仅在WordPress 5.5及更高版本中可用。因此,如果您正在开发任何插件或主题,请确保对任何较旧的WP版本使用条件检查和适当的后备。
从robots.txt中排除站点地图规则
启用站点地图后,WordPress会自动将以下规则添加到您站点的虚拟动态生成的robots.txt文件中:
Sitemap: https://example.com/wp-sitemap.xml
该行告诉搜索引擎和漫游器在哪里可以找到您的站点地图,这是一件好事。但是,出于某些原因,您想要自定义漫游器站点地图规则,甚至完全禁用它。因此,如果您需要执行此操作,请使用以下代码从robots.txt排除站点地图规则:
// do not add sitemap rule to robots.txt function shapeSpace_disable_sitemap_robots($wp_sitemaps) { remove_filter('robots_txt', array($wp_sitemaps, 'add_robots')); } add_action('wp_sitemaps_init', 'shapeSpace_disable_sitemap_robots');
初始化Sitemaps对象时会触发wp_sitemaps_init钩子。注意:如果“发现”搜索引擎无法访问该网站,则未添加robots.txt站点地图规则(由WP常规设置“搜索引擎可见性”确定)。因此,启用该设置后,不需要上面的代码。
问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!