Разве в пользовательских таксономиях не могут быть те же термины (слагы), что и в категориях?

8

Я знал, что нельзя иметь одинаковые термины (термины слагы) в категориях и тегах, но удивительно, как я понял сегодня, это относится и к пользовательским таксономиям.

Так, например, если у моего сайта есть категория с именем, Linux (linux)и я хочу также создать пользовательский термин таксономии, называемый «Linux», он будет выглядеть примерно так Linux (linux-2): слизни должны быть разными.

И если я пытаюсь переименовать слаг обратно linux, я получаю ошибку: «Слаг« linux »уже используется другим термином» .

Можно ли иметь одинаковые термины в категориях / тегах и пользовательских таксономиях (без ущерба для жизни)?


Как повторить проблему?

  1. Создайте 3-5 новых сообщений. Создайте новую категорию и тег и назначьте их этим сообщениям (только для целей тестирования).

  2. Сохраните настройки постоянной ссылки.

  3. создайте два новых условия в пользовательской таксономии с тем же именем и слагом, что и у категории и тега, которые вы создали ранее, и назначьте их новому сообщению с пользовательским типом сообщения.

  4. Удалить пользовательские таксономии.

  5. Попробуйте воссоздать их, и теперь вы получите ошибку: «Слаг« XXX »уже используется другим термином».

Иногда это повторяет проблему, иногда нет.

Но...

Если вы можете создать категорию (или тег) и пользовательскую таксономию с тем же именем и слагом, сделайте это. Затем переименуйте один из них, и вы заметите, что и категория (или тег), и пользовательская таксономия переименованы!

это я
источник
Хм, этого не происходит для меня. Можете ли вы вставить свой собственный код таксономии?
Мэтью Бойнс
@MatthewBoynes О, вот как это выглядит: gist.github.com/anonymous/5267905cccae4d52cc1b
its_me
Я использую последнюю ночную сборку WordPress, и ваш код дословно не сталкивается с этой ошибкой. Вот что вы должны сделать дальше: (1) В чистой установке WordPress 3.6.1 добавьте только чистый тип поста и код таксономии в чистую тему. Используйте Twenty Thirteen или Toolbox или что-то еще. Если это работает, вы знаете, что проблема не в WP, а в плагине или вашей теме. Если это произойдет, попробуйте то же самое с последней ночной сборкой 3.7. Если это работает, то вам не нужно беспокоиться, потому что 3.7 запускается, вероятно, на следующей неделе. Если это все еще происходит, предоставьте весь код, необходимый для его репликации.
Мэтью Бойнс
@ MatthewBoynes Хорошо. Я проверю это и посмотрю. Кстати, я уже на 3.7 стабильной, выпущенной где-то вчера / сегодня.
its_me
Ах, вы правы, я как-то пропустил это!
Мэтью Бойнс

Ответы:

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»).

Чтобы вместо этого установить префикс, измените эту строку в функции:

$args = array( 'slug' => $term->slug . '-books' );

что-то вроде этого:

// e.g. Term name 'PHP' and term slug 'books-php'
$args = array( 'slug' => 'books-' . $term->slug );

И как только ошибка исправлена ​​...

Создайте дамп базы данных и выполните поиск и замену регулярных выражений с помощью подходящего текстового редактора, такого как Sublime Text или TextMate (или как этот ).

Вероятно, не лучший способ сделать это, но достаточно хороший, чтобы выполнить работу.

это я
источник