首页 > 其他分享 >WordPress 5.5+ 如何自定义XML 站点地图功能

WordPress 5.5+ 如何自定义XML 站点地图功能

时间:2024-07-01 19:45:43浏览次数:1  
标签:XML sitemaps 5.5 自定义 地图 站点 过滤 wp post

关键要点

在WordPress 5.5中,WordPress将导出一个站点地图索引文件/wp-sitemap.xml。这是主要的XML文件,其中包含WordPress网站公开的所有站点地图页面的列表。

该站点地图索引最多可容纳50000个站点地图,单个站点地图最多可容纳2000个条目(可过滤)。

默认情况下,将为所有公开和可公开查询的文章类型和分类、以及作者存档,当然还有网站的主页创建站点地图。

WordPress自动创建的robots.txt文件将引用XML站点地图索引,以便搜索引擎可以轻松找到。

技术要求

在前端渲染站点地图需要SimpleXML PHP扩展。如果此扩展名不可用,将显示错误消息,而不是站点地图,并且会发送HTTP状态代码501(“未实现”)。

配置站点地图行为

添加自定义站点地图

WordPress提供开箱即用的内置内容类型(如页面和作者存档)的站点地图。如果您要开发的插件添加了除那些标准功能之外的自定义功能,或者只是想在您的网站上包含一些自定义网址,则添加自定义站点地图提供程序可能是有意义的。

为此,您需要做的就是创建一个自定义PHP类,用于扩展核心中的抽象类WP_Sitemaps_Provider。然后,您可以使用该wp_register_sitemap_provider()功能进行注册。示例如下:

add_filter(  
	'init',  
	function() {  
		$provider = new Awesome_Plugin_Sitemaps_Provider();  
		wp_register_sitemap_provider( 'awesome-plugin', $provider );  
	}  
);  

提供者将负责获取所有站点地图和站点地图条目,并确定分页。

删除某些站点地图

现有3种适用于WordPress对象类型(如文章,分类法和用户)的站点地图提供程序。如果要删除其中之一(例如“用户”提供程序),则可以利用wp_sitemaps_add_provider 过滤器来删除。示例如下:

add_filter(  
	'wp_sitemaps_add_provider',  
	function( $provider, $name ) {  
		if ( 'users' === $name ) {  
			return false;  
		}  
  
		return $provider;  
	},  
	10,  
	2  
); 

类似地,如果要禁用特定文章类型或分类法的站点地图生成,请分别使用wp_sitemaps_post_typeswp_sitemaps_taxonomies过滤器。

示例:为page文章类型禁用站点地图

add_filter(  
	'wp_sitemaps_post_types',  
	function( $post_types ) {  
		unset( $post_types['page'] );  
		return $post_types;  
	}  
); 

示例:为post_tag分类法(标签)禁用站点地图

add_filter(  
	'wp_sitemaps_taxonomies',  
	function( $taxonomies ) {  
		unset( $taxonomies['post_tag'] );  
		return $taxonomies;  
	}  
); 

向站点地图条目添加其他标签

站点地图协议指定一组特定的网站地图用于条目支持的属性。其中,仅URL网址(loc)标记是必需的。所有其他标记(例如changefreqpriority)都是站点地图协议中的可选标记,通常不会被搜索引擎使用,这就是WordPress仅列出网址本身的原因。如果开发人员确实愿意,他们仍然可以添加这些标签。

您可以使用wp_sitemaps_posts_entrywp_sitemaps_users_entrywp_sitemaps_taxonomies_entry过滤器额外添加标签,比如changefreqprioritylastmod到站点地图的当个网址中。

示例:添加文章的最后修改日期

add_filter(  
	'wp_sitemaps_posts_entry',  
	function( $entry, $post ) {  
		$entry['lastmod'] = $post->post_modified_gmt;  
		return $entry;  
	},  
	10,  
	2  
); 

同样,您可以使用wp_sitemaps_index_entry过滤器在站点地图索引上添加lastmod。注意:站点地图索引(sitemap index)不支持sitemaps protocal

尝试添加任何不受支持的标签将导致_doing_it_wrong通知。

从站点地图中排除单个帖子

如果您正在开发一个允许将特定文章或页面设置为noindex的插件,则最好也将其从站点地图中排除。

wp_sitemaps_posts_query_args过滤器可用于从站点地图中排除特定帖子。示例如下:

add_filter(  
	'wp_sitemaps_posts_query_args',  
	function( $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'][] = 123; // 123 is the ID of the post to exclude.  
		return $args;  
	},  
	10,  
	2  
);  

完全禁用站点地图功能

如果您更新WordPress 后台 设置 – 阅读 的“对搜索引擎的可见性”设置以阻止搜索引擎将您的网站编入索引,则站点地图将被禁用。您还可以使用wp_sitemaps_enabled过滤器覆盖它。示例如下:

add_filter( 'wp_sitemaps_enabled', '__return_false' );  

注意:这样做不会删除用于站点地图的重写规则,因为在禁用站点地图时,为了发送适当的响应,需要使用它们。

图片/视频/新闻站点地图

WordPress当前实现并支持sitemaps.org上定义的核心Sitemaps格式。此功能未涵盖站点地图扩展名,例如图像、视频和新闻站点地图,因为它们通常仅对少数网站有用。在未来的WordPress版本中,可能会添加过滤器和挂钩以启用此类功能。目前,这仍将留给插件来实施。

新增的类和函数

在撰写本文时,以下是引入的新类和函数的完整列表。

函数:

  • wp_sitemaps_get_server –检索当前的Sitemaps服务器实例。
  • wp_get_sitemap_providers –获取站点地图提供程序的数组。
  • wp_register_sitemap_provider –注册新的站点地图提供程序。
  • wp_sitemaps_get_max_urls –获取站点地图的最大网址数。

类:

  • WP_Sitemaps –负责设置重写和注册所有提供程序的主类。
  • WP_Sitemaps_Index –构建站点地图索引页面,该页面列出了所有站点地图的链接。
  • WP_Sitemaps_Provider –其他站点地图提供程序扩展的基类,并包含共享功能。
  • WP_Sitemaps_Registry –处理注册站点地图提供程序。
  • WP_Sitemaps_Renderer –负责根据站点地图协议将站点地图数据呈现为XML。
  • WP_Sitemaps_Stylesheet –此类提供XSL样式表来设置所有站点地图的样式。
  • WP_Sitemaps_Posts –为“文章”对象类型及其子类型(自定义文章类型)构建站点地图。
  • WP_Sitemaps_Taxonomies –为“分类法”对象类型及其子类型(自定义分类法)构建站点地图。
  • WP_Sitemaps_Users –为“用户”对象类型构建站点地图。

可用的挂钩和过滤器

在撰写本文时,以下是可用钩子和过滤器的完整列表。

常规:

  • wp_sitemaps_enabled –过滤是否启用XML Sitemap。
  • wp_sitemaps_max_urls –过滤站点地图上显示的URL的最大数量。
  • wp_sitemaps_init –初始化站点地图时触发。
  • wp_sitemaps_index_entry –过滤站点地图索引的站点地图条目。

提供者:

  • wp_sitemaps_add_provider –在添加站点地图提供程序之前对其进行过滤。
  • wp_sitemaps_post_types –过滤要包含在站点地图中的文章类型列表。
  • wp_sitemaps_posts_entry –过滤单个文章的站点地图条目。
  • wp_sitemaps_posts_show_on_front_entry –当“show_on_front”选项等于“posts”时,过滤主页的站点地图条目。
  • wp_sitemaps_posts_query_args –过滤帖子类型站点地图查询的查询参数。
  • wp_sitemaps_posts_pre_url_list –在生成帖子URL列表之前将其过滤(短路)。
  • wp_sitemaps_posts_pre_max_num_pages –在生成最大页面(短路)之前对其进行过滤。
  • wp_sitemaps_taxonomies –过滤分类法列表以包含在站点地图中。
  • wp_sitemaps_taxonomies_entry –过滤单个分类词的站点地图条目。
  • wp_sitemaps_taxonomies_query_args –筛选分类法站点地图查询的查询参数。
  • wp_sitemaps_taxonomies_pre_url_list –在生成分类法URL列表之前将其过滤(短路)。
  • wp_sitemaps_taxonomies_pre_max_num_pages –在生成最大页面(短路)之前对其进行过滤。
  • wp_sitemaps_users_entry –过滤单个用户的站点地图条目。
  • wp_sitemaps_users_query_args –过滤用户站点地图查询的查询参数。
  • wp_sitemaps_users_pre_url_list –在生成URL(短路)之前过滤用户URL列表。
  • wp_sitemaps_users_pre_max_num_pages –在生成最大页面(短路)之前对其进行过滤。

样式表:

  • wp_sitemaps_stylesheet_css–过滤站点地图样式表的CSS。
  • wp_sitemaps_stylesheet_url –过滤站点地图样式表的URL。
  • wp_sitemaps_stylesheet_content –过滤站点地图样式表的内容。
  • wp_sitemaps_stylesheet_index_url –过滤站点地图索引样式表的URL。
  • wp_sitemaps_stylesheet_index_content –过滤站点地图索引样式表的内容。

标签:XML,sitemaps,5.5,自定义,地图,站点,过滤,wp,post
From: https://www.cnblogs.com/xiaobingch/p/18278676

相关文章

  • Eclipse 创建 XML 文件
    打开新建XML文件向导你可以使用新建XML文件向导来创建XML文件。打开向导的方式有:点击File菜单并选择New>Other点击新建下拉框()选择Other快捷键组合:ctrl+N在向导对话框中可以进行以下操作:在输入框中输入XML,会显示关联XML的向导在展开的XML类别中选......
  • EasyExcel 自定义表头颜色
    publicvoidexport(ObjectDTOdto,HttpServletResponseresponse){try{if(ObjectUtils.isEmpty(dto.getObjNumberList())){thrownewBusinessException("编号不允许为空");}ListRespresult=o......
  • 自定义vue3 hooks
    文章目录hooks目录结构demohooks当页面内有很多的功能,js代码太多,不好维护,可以每个功能都有写一个js或者ts,这样的话,代码易读,并且容易维护,组合式setup写法与此结合......
  • springboot-javax.validation编写自定义校验注解
    引入依赖:<!--jsr303--><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><!--hibernatevalidator--><depen......
  • ros micro-ros 自定义消息接口
    本节课最终效果是:通过自定义的服务接口控制开发板上的OLED显示器的内容。ros2servicecall/oled_controlfishbot_interfaces/srv/OledControl"{px:0,py:0,data:'oledcontrolbyservice~'}" 一、新建工程添加依赖新建example14_custom_interface,注意请不要将工......
  • 嵌入式Linux系统编程 — 5.5 sleep、usleep和nanosleep系统休眠函数
    目录1为什么需要休眠2 sleep、usleep和nanosleep函数2.1sleep函数2.2 usleep函数2.3 nanosleep函数3示例程序1为什么需要休眠有时需要将进程暂停或休眠一段时间,进入休眠状态之后,程序将暂停运行,直到休眠结束。以下是一些常见的休眠场景和作用:避免过载:在高......
  • QT 使用Q_PLUGIN_METADATA实现自定义插件
    1.创建一个继承自QObject的类,并在类的实现文件中使用Q_PLUGIN_METADATA宏定义插件的元数据信息。这个宏通常包含插件的元数据,如插件的标识符、版本号等。2.在插件项目的.pro文件中添加QT += core gui widgets以确保能够使用Qt的相关功能。3.在主应用程序中使用QPluginLoade......
  • 最新AIGC系统源码-ChatGPT商业版系统源码,自定义ChatGPT指令Promp提示词,AI绘画系统,AI换
    目录一、前言系统文档二、系统演示核心AI能力系统快速体验三、系统功能模块3.1AI全模型支持/插件系统AI模型提问文档分析​识图理解能力3.2GPts应用3.2.1GPTs应用3.2.2GPTs工作台3.2.3自定义创建Promp指令预设应用3.3AI专业绘画3.3.1文生图/图生图(垫图)......
  • Dubbo 如何自定义协议为业务通信带来扩展
    Solomon_肖哥弹架构跟大家“弹弹”Dubbo自定义协议扩展欢迎点赞,收藏,关注。关注本人的公众号Solomon肖哥弹架构获取更多精彩内容Dubbo自定义协议扩展1、扩展说明RPC协议扩展,封装远程调用细节。契约:当用户调用refer()所返回的Invoker对象的invoke()方法......
  • SpringBoot自定义注解实现接口幂等
    一、前言接口幂等就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的。对数据库的查询和删除是天然幂等的,更新操作在大多数场景下也是天然幂等。插入大多数情况下都是非幂等的,除非利用数据库的唯一索引来保证数据不会重复保存。二、为什么需要幂等1.超时重试......