问题描述

我知道在类别和标签下不可能有相同的术语 (术语 s s),但令人惊讶的是,正如我今天意识到的那样,自定义分类法也是如此。

所以例如,如果我的网站有一个名为 Linux (linux)的类别,并且我想创建一个名为’Linux’ 的自定义分类术语,它会像 Linux (linux-2)一样,即 lug 子必须是不同的。

如果我尝试重新命名为 linux,我会收到错误,「s lug ‘linux’ 已经被另一个术语使用了」 。

在类别/标签和自定义分类法下是否可以使用相同的术语 (不会造成破坏)?


如何复制问题?

  1. 创建 3-5 个新职位。创建一个新的类别和标签,并将它们分配给这些帖子 (仅用于测试目的) 。

  2. 保存永久链接设置。

  3. 在自定义分类法下创建与您之前创建的类别和标签相同的名称和 s 尾的两个新术语,并将其分配给自定义帖子类型下的新帖子。

  4. 删除自定义分类法。

  5. 请尝试重新创建它们,然后您会收到错误:「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 TextTextMate(或 like this)) 进行正则表达式搜索和替换。

可能不是最好的方法,但是要做好这项工作就够好了。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。