如何通过代码自定义WordPress站点地图(sitemaps)?

对于那些使用WordPress提供的站点地图的人,您可能会发现需要进行一些自定义以满足您网站的特定需求。如何通…

对于那些使用WordPress提供的站点地图的人,您可能会发现需要进行一些自定义以满足您网站的特定需求。如何通过代码自定义WordPress站点地图(sitemaps)?

如何通过代码自定义WordPress站点地图(sitemaps)? (https://www.wpzt.net/) WordPress教程 第1张

通过代码自定义站点地图

在下面,您将找到代码示例,这些示例可用于自定义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常规设置“搜索引擎可见性”确定)。因此,启用该设置后,不需要上面的代码。

类别:WordPress技巧

本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

评论 (0)COMMENT