如何通过代码自定义WordPress站点地图(sitemaps)?
对于那些使用WordPress提供的站点地图的人,您可能会发现需要进行一些自定义以满足您网站的特定需求。如何通…
对于那些使用WordPress提供的站点地图的人,您可能会发现需要进行一些自定义以满足您网站的特定需求。如何通过代码自定义WordPress站点地图(sitemaps)?
通过代码自定义站点地图
在下面,您将找到代码示例,这些示例可用于自定义WordPress站点地图(在WP 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主题功能即可。
禁用文章类型站点地图
默认情况下,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常规设置“搜索引擎可见性”确定)。因此,启用该设置后,不需要上面的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
评论功能已经关闭!