自定义分类法不能与类别使用相同的术语(标记)吗?


8

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

因此,例如,如果我的网站有一个名为的类别,Linux (linux)并且我也想创建一个自定义的分类法术语“ Linux”,则它看起来像Linux (linux-2),即子弹头必须不同。

而且,如果我尝试将Slug重命名为linux,则会收到错误消息:“ Slug'linux'已被另一个术语使用”

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


如何复制问题?

  1. 创建3-5个新帖子。创建一个新类别并标记并将其分配给这些帖子(仅出于测试目的)。

  2. 保存永久链接设置。

  3. 在自定义分类法下创建两个与您之前创建的类别和标签具有相同名称和子句的新术语,然后将它们分配给自定义帖子类型下的新帖子。

  4. 删除自定义分类法。

  5. 尝试重新创建它们,现在您将收到错误消息:“子词“ XXX”已被另一个术语使用。”

有时那会重现问题,有时不会。

但...

如果您能够使用相同的名称和子标签创建类别(或标签)和自定义分类法,请执行此操作。然后,重命名其中之一,您会注意到类别(或标签)和自定义分类法都被重命名了!


嗯,这对我来说不会发生。您可以粘贴自定义分类法代码吗?
马修·博因斯

@MatthewBoynes哦,这就是它的样子:gist.github.com/anonymous/5267905cccae4d52cc1b
its_me 2013年

我使用的是最新的WordPress夜间版本,您的代码逐字记录不会遇到此错误。这是您下一步应执行的操作:(1)在WordPress 3.6.1的全新安装中,仅将帖子类型和分类法代码添加到干净的主题中。使用二十三个十三或工具箱之类的东西。如果可行,您知道问题不在WP中,而是与插件或主题有关。如果确实发生,请尝试使用最新的每晚版本3.7进行相同操作。如果可行,那么您不必担心,因为3.7可能会在下周发布。如果仍然发生,请提供复制它所需的所有代码。
马修·博因斯

@MatthewBoynes好的。我将对其进行测试,然后看看。顺便说一句,我已经在昨天/今天某个时候发布的3.7稳定版上了。
its_me 2013年

啊,你是对的,我莫名其妙地错过了!
马修·博因斯

Answers:


9

事实证明,这是核心错误。我将要报告它,但是发现它已经存在了很多年,并且也适用于自定义分类法。查看门票:#5809#21950#22023

如果一切按计划进行,则将其固定在 3.8 3.9 4.14.2。更新:是的,已修复


同时,这是解决此问题的计划-为分类法下所有新创建的术语自动设置自定义子词后缀:

/*
 * 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 );

并修复了错误后...

转储数据库并进行正则表达式搜索,并使用适当的文本编辑器(例如Sublime TextTextMate(或类似))进行替换。

可能不是最好的方法,但足以完成工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.