问题描述
我知道在类别和标签下不可能有相同的术语 (术语 s s),但令人惊讶的是,正如我今天意识到的那样,自定义分类法也是如此。
所以例如,如果我的网站有一个名为 Linux (linux)
的类别,并且我想创建一个名为’Linux’ 的自定义分类术语,它会像 Linux (linux-2)
一样,即 lug 子必须是不同的。
如果我尝试重新命名为 linux
,我会收到错误,「s lug ‘linux’ 已经被另一个术语使用了」 。
在类别/标签和自定义分类法下是否可以使用相同的术语 (不会造成破坏)?
如何复制问题?
-
创建 3-5 个新职位。创建一个新的类别和标签,并将它们分配给这些帖子 (仅用于测试目的) 。
-
保存永久链接设置。
-
在自定义分类法下创建与您之前创建的类别和标签相同的名称和 s 尾的两个新术语,并将其分配给自定义帖子类型下的新帖子。
-
删除自定义分类法。
-
请尝试重新创建它们,然后您会收到错误:「s lug ‘XXX’ 已被另一个术语使用。」
有时会复制这个问题,有时候它不会。
但…
如果您能够创建一个类别 (或标签) 和具有相同名称和分数的自定义分类法,请执行此操作。然后,重命名其中一个,你会注意到类别 (或标签) 和自定义分类法都被重命名了!
最佳解决思路
原来,这是一个核心的错误。我即将举报,但发现它已经存在了,就像几年一样,也适用于定制分类法。参见门票:#5809,#21950 和 #22023 。
如果全部按计划进行,则设定为 3.8 3.9 4.1 4.2 。更新:是的,fixed!
在此期间,这是一个克服这个问题的计划 – 为分类法下的所有新创建的术语自动设置一个自定义段落后缀:
/*
* Set custom slug suffix for terms of a taxonomy
*
* http://wordpress.stackexchange.com/q/42550/10691
* http://wordpress.stackexchange.com/q/71304/10691
* http://wordpress.stackexchange.com/q/120096/10691
* https://github.com/WordPress/WordPress/blob/master/wp-includes/taxonomy.php
*/
add_action( 'created_term', 'aahank_add_suffix_to_term', 10, 3 );
function aahank_add_suffix_to_term( $term_id, $tt_id, $taxonomy ) {
if( $taxonomy == 'book' ) {
// e.g. Term name 'PHP' and term slug 'php-books'
$term = get_term( $term_id, $taxonomy );
$args = array( 'slug' => $term->slug . '-books' );
wp_update_term( $term_id, $taxonomy, $args );
}
}
这不是追溯性的,也就是我们的自定义后缀 (‘-books’) 创建了分类下的新术语 (我们的例子是’books’) 。
要改为设置前缀,请在函数中更改此行:
$args = array( 'slug' => $term->slug . '-books' );
像这样:
// e.g. Term name 'PHP' and term slug 'books-php'
$args = array( 'slug' => 'books-' . $term->slug );
一旦 bug 修复了
转储数据库,并使用正确的文本编辑器 (如 Sublime Text 或 TextMate(或 like this)) 进行正则表达式搜索和替换。
可能不是最好的方法,但是要做好这项工作就够好了。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。