Не могут ли пользовательские таксономии иметь одинаковые термины (слизняки) в качестве категорий?

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

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

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

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


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

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

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

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

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

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

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

Но…

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

Solutions Collecting From Web of "Не могут ли пользовательские таксономии иметь одинаковые термины (слизняки) в качестве категорий?"

Оказывается, это ошибка в ядре. Я собирался сообщить об этом, но выяснил, что он существует там, например, годами, и относится к обычным таксономии. Смотрите билеты: # 5809 , # 21950 и # 22023 .

Если все идет так, как планировалось, оно устанавливается в 3,8 3,9 4,1 4.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' ) { // eg 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 ); } } 

Это не ретроспективно, т.е. пули только новых терминов под таксономией («книги» в нашем случае) создаются с помощью нашего пользовательского суффикса («книги»).

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

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

к чему-то вроде этого:

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

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

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

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