Почему get_term () требует таксономии? Term_ids не уникальны?


8

Соответствующий вопрос WPSE спрашивает, как получить термин, указав только идентификатор, без указания таксономии. Мой вопрос более философский. Как правило, вещи в ядре WP есть причина. Я пытаюсь понять, почему term_id не может быть основным ключом для этого термина - зачем нам нужна таксономия? Может ли однократная запись быть членом нескольких таксономий? Это, конечно, в настоящее время не поддерживается в API. Есть ли вариант использования, где это может быть желательно?

Или это обязательный $taxonomyпараметр в get_term()рудиментарном хвосте из более раннего воплощения структуры базы данных?


3
Я не совсем уверен, но я думаю, что это больше проблема производительности, так как поле таксономии wp_term_taxonomyтаблицы используется в качестве индекса для этой таблицы, что делает запрос быстрее (даже если это просто термин).
Bainternet

@Bainternet Пожалуйста, посмотрите в конце моего А. EXPLAINговорит term_id.
Кайзер

1
Я думаю, что это рудиментарный хвост. Регистрация билета с Trac: core.trac.wordpress.org/ticket/20536
Том

Ответы:


3

Я зарегистрировал тикет против этого с trac: http://core.trac.wordpress.org/ticket/20536

Однако оказывается, что на данный момент это НУЖНО, так как в настоящее время в WordPress (начиная с версии 2.x) есть ошибка, связывающая два термина с одним и тем же именем в один и тот же term_id! Таким образом, возможно (хотя и неверно), чтобы один термин ассоциировался с более чем одной таксономией. Смотрите эту ошибку: http://core.trac.wordpress.org/ticket/5809

Она довольно обширна, поэтому для ее исправления потребуется очень тщательное тестирование. Я постараюсь не забыть обновить этот вопрос, если будут какие-либо события.


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

Спасибо за обновление этого вопроса, чтобы выбрать правильный ответ, Том! Надеюсь, это поможет тем, кто приземлится на этот вопрос в будущем. И спасибо за ответ / ссылки. Очень полезно.
rinogo

1
Напоминание обновить этот вопрос - кстати, не было ли что-то с термином псевдоним ?
Кайзер

Привет @kaiser, обнови его чем? Я не уверен, что было какое-либо дальнейшее позитивное движение к решению упомянутых проблем Trac.
Том Оджер

В настоящее время его цель установлена ​​на 3,7 ранних . Давай посмотрим что происходит. Чего не хватает? В конце не мог следовать, так как я прочитал юнит-тест.
Кайзер

1

зачем нам таксономия? Может ли однократная запись быть членом нескольких таксономий?

У терминов есть слага для поддержки архивов терминов. А наличие слагов два раза вызывает много минетрапов или "wontfix" в некоторых сценариях с постоянными ссылками.

Есть ли вариант использования, где это может быть желательно?

Да: представьте, что у вас есть термины, например, sizeи у вас есть три названные таксономии length, width и height(вы также можете подумать о цветах). Но это не поддерживается по причинам, указанным выше.

Как правило, вещи в ядре WP есть причина. Я пытаюсь понять, почему term_id не может быть основным ключом для этого термина - зачем нам нужна таксономия?

Глядя на стол и запустив EXPLAIN, term_id это первичный ключ. Я предполагаю, что в больших системах может быть быстрее запрашивать только определенные термины таксономии, используя (медленное) объединение, чем запрашивать все, сортировать их и фильтровать то, что вам нужно.


Судя по звукам вещей, он либо ошибается (возможно, перенесен из предыдущей схемы), либо существует в будущем, когда вам может быть разрешено иметь дубликаты слагов (маловероятно). В любом случае, я не уверен, что вы ответили на мой вопрос.
Том Оже

@TomAuger "Есть ли вариант использования, где это может быть желательно": Да. Но против весов больше. Термин в налоге A может иметь то же имя, что и термин в налоге B, но, например, другое значение. Итак, если вы спрашиваете «вес» в таксономиях «важность» и «стоимость доставки», что тогда будет «действительно тяжелым»?
Кайзер

Да, но здесь мы говорим об идентификаторе термина, а не имени NAME. Идентификатор уже полностью устраняет неоднозначность термина с любым другим термином (в любой таксономии), который может иметь то же имя. Обратите внимание, что это не вопрос базы данных, а то, почему он остался в основном коде.
Том Ожер

@TomAuger Было бы проще, если бы вы следили за этим Q в конце декабря. Теперь я бы снова занялся этим: /
kaiser
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.