温馨提示:这篇文章已超过708天没有更新,请注意相关的内容是否还可用!
之前使用WordPress建站如果需要创建网站地图,一般需要借助插件,但WordPress从5.5版本开始自带了网站地图功能,且网站地图功能已经默认开启,无需任何操作就能使用,默认生成的网站地图地址为:YourURL.com/wp-sitemap.xml。
一、默认网站地图功能简介
当前,默认情况下,WP站点地图会为以下任何/所有项目(如果存在)生成站点地图:
用户(包括指向所有文章作者的作者-归档视图的链接)
文章类型(包括文章、页面和任何其他公共自定义文章类型)
分类法(包括类别、标签和任何自定义分类法)
这篇文章说明了如何根据需要排除每个站点地图。它还显示了如何排除特定的用户、文章类型和分类法。因此,基本上,您可以使用一些简单的复制/粘贴代码段自定义几乎所有内容。
二、默认网站地图功能的局限及解决办法
2.1 默认网站地图是索引型地图
比如“百度搜索资源平台”就不支持索引型网站地图,会提示“索引型不予处理”,什么意思呢?就是不支持xml网站地图中嵌套xml文档。解决办法也很简单,将wp-sitemap.xml中的包含的xml文件全部提交就可以了:
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');
还没有评论,来说两句吧...