分词(WordPress 4.2)

此处的信息用于历史目的。如果您对2015年之前条款的工作方式不感兴趣,可以跳过此部分。

WordPress 4.2之前

具有相同slug的不同分类中的术语共享一个术语ID。例如,带有slug“news”的标记和类别具有相同的术语ID。

WordPress 4.2语言+

从4.2开始,当其中一个共享术语被更新时,它将被拆分:更新后的术语将被分配一个新的术语ID。

这对你意味着什么?

在绝大多数情况下,这次更新都是天衣无缝、平安无事的。然而,一些在选项、帖子元、用户元或其他地方存储术语ID的插件和主题可能会受到影响。

处理拆分

WordPress 4.2包括两个不同的工具,用于帮助插件和主题的作者进行转换。

split_shared_term挂钩

当为共享术语分配新的术语ID时拆分共享项已触发操作。

下面是插件和主题作者如何利用这个钩子来确保存储的术语ID得到更新的几个示例。

选项中存储的术语ID

假设你的插件存储了一个名为featured_tags(特征_标签)包含术语ID数组的([4, 6, 10])作为主页特色帖子部分的查询参数。

在本例中,您将挂接到拆分共享项操作,检查更新的术语ID是否在数组中,并根据需要进行更新。

/***当共享术语被拆分时,更新featured_tags选项。**@param int$term_id以前共享术语的id。*@param int$new_term_id为$term_taxonomy_id创建的新术语的id。*受拆分影响的term_taxonomy行的@param int$term_tasonomy_id id。*拆分术语的@param string$taxonomy分类。*/函数wporg_featured_tags_split(int$termid,int$new_termid,int$term_taxonomy_id,string$taxonomy):void{//我们只关心标签,所以首先要验证分类法是posttag。if(“post_tag”===$taxonomy){//获取当前功能标签。$featured_tags=获取选项('feature_datgs');//如果更新的术语在数组中,请注意数组键。$found_term=数组搜索($term_id,$featured_tags,true);if(false!==$found_term){//更新的术语是一个特色标签!在数组中替换它,保存新数组。$featured_tags[$found_term]=$new_term_id;update_option('featured_tags',$featuredtags);}}}add_action('split_shared_term','wporg_featured_tags_split',10,4);

词条ID存储在post meta中

假设您的插件在页面的帖子元中存储了一个术语ID,以便您可以显示特定页面的相关帖子。

在这种情况下,您需要使用获取posts()函数获取页面元键(_K)并更新元值(_V)匹配分割的术语ID。

/***更新页面的相关帖子术语ID**@param int$term_id以前共享术语的id。*@param int$new_term_id为$term_taxonomy_id创建的新术语的id。*受拆分影响的term_taxonomy行的@param int$term_tasonomy_id id。*拆分术语的@param string$taxonomy分类。*/函数wporg_page_related_posts_split(int$termid,int$new_term_id,int$term_taxonomy_id,string$taxonomy):void{//查找meta_value与旧术语ID匹配的所有页面。$page_ids=获取文章(阵列(“post_type”=>“页面”,“字段”=>“id”,“meta_key”=>“meta_ key”,“元值”=>$term_id,));//如果存在这样的页面,请更新每个页面的术语ID。if($pageid){foreach($page_id作为$id){更新post_meta($id,'meta_key',$new_term_id,$term_id);}}}add_action('split_shared_term','wporg_page_related_posts_split',10,4);

wp_get_split_term函数


使用拆分共享项hook是处理术语ID更改的首选方法。

然而,在某些情况下,如果您的插件没有机会连接到拆分共享项行动。

WordPress 4.2存储有关已拆分的分类术语的信息,并提供wp_get_split_term()实用程序函数帮助开发人员检索此信息。

考虑上面的情况,您的插件将术语ID存储在一个名为featured_tags(特征_标签)。您可能希望构建一个函数来验证这些标记ID(可能在插件更新时运行),以确保没有拆分任何功能标记:

/***检索有关拆分术语的信息,并使用新的术语ID创建featured_tags选项。**@返回void*/函数wporg_featured_tags_check_split(){$featured_tag_ids=获取选项('feature_datgs',数组());//检查是否有任何ID对应于已拆分的post_tag术语。foreach($featuredtag_id作为$index=>$feature标记id){$new_term_id=wp_get_split_term($featured_tag_id,'post_tag');if($new_termid){$featured_tag_ids[$索引]=$new_term_id;}}//保存更新选项(“featured_tags”,$featuredtag_id);}

请注意wp_get_split_term()采用两个参数,$old_term_id$分类法并返回一个整数。

如果需要检索与旧术语ID关联的所有拆分术语的列表,无论其分类如何,请使用wp_get_split_terms().