Почему WordPress объединяет термин с тем же именем в таблице терминов wp?


  1. Добавьте термин для определенной таксономии с именем: Тест
  2. Добавьте другой термин для другой таксономии с тем же именем: Тест
  3. В таблице wp_terms вы найдете одну запись для обоих терминов. В таблице wp_term_taxonomy вы найдете две записи с таксономией и описанием, а также другую информацию о терминах.
  4. Теперь, если вы отредактируете один термин и измените имя с Test на Test2, то оба термина будут изменены...

Почему WordPress работает таким образом?

РЕДАКТИРОВАТЬ: Реальный вопрос не в том, почему WP использует уникальный слиток для таксономии. Это очевидно. Вот почему WP использует одну запись в wp_terms для одного и того же термина. Но значение "Теста" может быть разным в разных таксономиях. Если вы измените одно из условий, чтобы оно было другим. Это больше невозможно. WordPress будет редактировать оба, потому что они оба связаны с одним и тем же термином_id.

 5
Author: Mike van Hoenselaar, 2012-08-03

1 answers

Это потому, что термины.слизняк и terms.name оба являются уникальными индексами со структурой таблицы MySQL.

Unique  Packed  Column  Cardinality Collation
PRIMARY BTREE   Yes No  term_id 13  A
slug    BTREE   Yes No  slug    13  A
name    BTREE   No  No  name    13  A

WordPress использует канонические перенаправления, которые в основном основаны на жизнеспособном единственном posts.post_name или terms.slug результат запроса. Наличие нескольких записей для одного и того же post_name или slug полностью снижает надежность канонических перенаправлений, поэтому в этих таблицах определены уникальные индексы.

Причина, по которой имя термина уникально, заключается в том, что оно обычно является источником пули, когда пользователь создает новую категорию или тег. Кроме того, слагаемые терминов меню создаются на основе названия термина. Если два имени совпадают, то слизняк не будет уникальным.

Хотя я бы не рекомендовал этого, вы можете вручную перейти в term_taxonomy и связать term_id с другим термином, если вам нужен псевдо-"дубликат". Я не могу говорить о последствиях этого на вашем сайте, но технически это сработало бы, чтобы подорвать этот структурный диктант.

Один мудрый человек однажды сказал мне: не сжигай мост, не спросив во-первых, почему он был построен. Это хорошее приложение. Не начинайте создавать псевдо-дубликаты, не понимая, почему индексы таблиц уникальны в первую очередь.

Канонические перенаправления действуют с 2.3. Ознакомьтесь с сообщением Марка Джакита здесь для более подробного объяснения.

Для отключения канонических перенаправлений можно использовать следующее:

remove_filter('template_redirect', 'redirect_canonical');

Надеюсь, это поможет немного прояснить проблему.

 5
Author: Brian Fegter, 2012-08-03 14:52:10