WordPress自带网站地图功能,不再需要使用插件

马肤
这是懒羊羊

温馨提示:这篇文章已超过546天没有更新,请注意相关的内容是否还可用!

之前使用WordPress建站如果需要创建网站地图,一般需要借助插件,但WordPress从5.5版本开始自带了网站地图功能,且网站地图功能已经默认开启,无需任何操作就能使用,默认生成的网站地图地址为:YourURL.com/wp-sitemap.xml。

一、默认网站地图功能简介

当前,默认情况下,WP站点地图会为以下任何/所有项目(如果存在)生成站点地图:

  • 用户(包括指向所有文章作者的作者-归档视图的链接)

  • 文章类型(包括文章、页面和任何其他公共自定义文章类型)

  • 分类法(包括类别、标签和任何自定义分类法)

这篇文章说明了如何根据需要排除每个站点地图。它还显示了如何排除特定的用户、文章类型和分类法。因此,基本上,您可以使用一些简单的复制/粘贴代码段自定义几乎所有内容。

二、默认网站地图功能的局限及解决办法

2.1 默认网站地图是索引型地图

比如“百度搜索资源平台”就不支持索引型网站地图,会提示“索引型不予处理”,什么意思呢?就是不支持xml网站地图中嵌套xml文档。解决办法也很简单,将wp-sitemap.xml中的包含的xml文件全部提交就可以了:

WordPress自带网站地图功能,不再需要使用插件,百度搜索资源中心提交网站地图,WordPress,第1张
百度搜索资源中心提交网站地图

2.2 默认网站地图有数量限制

网站地图最多索引50000个条目,单个网站地图最多可容纳2000个条目。突破50000条限制可以修改wp-includes/sitemaps/class-wp-sitemaps-index.php文件,将其中的数字50000修改为您想要的数字。突破每页2000的数量限制的方法也很简单,只需要将以下代码添加到主题functions.php文件中即可,其中的2000可以任意修改,比如改成10000:

add_filter( 'wp_sitemaps_max_urls', '__wp_sitemaps_max_urls' );function __wp_sitemaps_max_urls(){    return 2000;}

三、禁用WordPress默认网站地图功能

可能您的网站已经使用了自定义的网站地图或第三方网站地图插件,而您并不想改变它,那么WordPress自带的网站地图功能就显得很多余,您同样可以很简单禁用它,将以下代码添加到当前主题的functions.php中:

//移除 WordPress XML 站点地图add_filter( 'wp_sitemaps_enabled', '__return_false' );

四、默认网站地图功能的一些高阶用法

4.1 禁用用户站点地图

对于大多数网站来说,排除/禁用整个用户站点地图以帮助提高安全性可能是一个好主意。以下是实现该功能的代码:

// disable users sitemapfunction shapeSpace_disable_sitemap_users($provider, $name) {    return ($name == 'users') ? false : $provider;  }add_filter('wp_sitemaps_add_provider', 'shapeSpace_disable_sitemap_users', 10, 2);

4.2 禁用文章类型站点地图

默认情况下,WordPress站点地图包括每种(非空)文章类型的站点地图,要排除任何“文章”类型的站点地图,请将以下代码添加到您的主题(或简单的插件)中:

// disable post type sitemapfunction 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,等)。

4.3 禁用分类法站点地图

要排除任何“分类”站点地图,请在主题(或简单插件)中添加以下代码:

// disable taxonomy sitemapfunction 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,等)。

4.4 从站点地图中排除特定页面

要从WordPress网站地图中排除特定页面,请应用以下代码技术:

// disable specific pagefunction 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 pagesfunction 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);

4.5 从站点地图中排除特定文章

与以前的技术类似,要从自动生成的WordPress网站地图中排除特定的文章,请执行以下操作:

// disable specific postfunction 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 postsfunction 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);

4.6 根据元字段排除文章

也可以根据其附加的元数据排除特定的文章。例如,如果您的文章有一个名为sitemap的元字段。并且您只想包含sitemap值为1的文章。添加以下代码以使其实现:

// disable post based on meta fieldfunction 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');



文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,452人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码