Как получить все таксономии, к которым относится публикация - Wordpress

Спасибо, что нашли время, чтобы изучить этот вопрос, и надеюсь, вы сможете помочь!

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

Например; скажем, у меня есть категория / таксономия продуктов и категория / таксономия субпродуктов на моем сайте Wordpress. Когда я попадаю на страницу категории продукта / таксономии, я хотел бы увидеть список всех связанных подкатегорий / таксономий.

Я надеюсь, что это имеет смысл, так как после многих часов, проведенных в Google, все, что я могу найти, - это вопросы о том, как получить все сообщения, связанные с таксономией, - а не наоборот!

Спасибо заранее!

Патрик


person Patrick Kelly    schedule 02.03.2015    source источник
comment
Подкатегории продуктов являются дочерними по отношению к категориям продуктов?   -  person    schedule 02.03.2015
comment
Привет, Бобди! Спасибо, что нашли время посмотреть на мою проблему. Итак, в этом примере у меня есть список продуктов, по которым можно фильтровать; производитель, состояние, тип (например, тракторы, газонокосилки и т. д.) и подтип (например, юниор, взрослый, аксессуары и т. д.). Что мне нужно сделать, так это когда пользователь фильтрует по производителю, а затем на сайте отображаются соответствующие типы и подтипы для этого производителя. Я надеюсь это имеет смысл! Извините за длинный комментарий.   -  person Patrick Kelly    schedule 03.03.2015
comment
В целом я понимаю, чего вы пытаетесь достичь. Я пытался выяснить, является ли подтип просто терминологией или указывает на связь. Судя по вашему примеру, подтип - это просто еще одна категория / таксономия для выбора продуктов и не является дочерним элементом какого-либо другого критерия.   -  person    schedule 03.03.2015
comment
подтип или любые другие категории / таксономии не связаны с родительскими / дочерними, нет. Вы правы в своем понимании моего примера.   -  person Patrick Kelly    schedule 04.03.2015


Ответы (1)


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

Предположим, у вас есть массив идентификаторов продуктов $ product_id, например идентификаторы продуктов, отображаемых в данный момент. У вас должна быть возможность получить таксономию и термины, применимые к этим продуктам, следующим образом:

global $wpdb;

$ids = implode(',', $product_id);
$query = "SELECT x.taxonomy, t.name FROM wp_term_taxonomy AS x
          JOIN wp_term AS t on t.term_id = x.term_id
          JOIN wp_terms_relationships AS r on r.term_taxonomy_id = x.term_taxonomy_id
          WHERE r.object_id IN ($ids)
          GROUP BY x.taxonomy, t.name";
$taxonomies = $wpdb->get_results( $query );

В вышеприведенном:

SELECT x.taxonomy, t.name FROM wp_term_taxonomy AS x

это базовая таблица таксономий (имен) и term_ids их терминов.

JOIN wp_terms AS t on t.term_id = x.term_id

сопоставляет каждый из term_id из wp_term_taxonomy с его именем термина.

JOIN wp_term_relationships AS r on r.term_taxonomy_id = x.term_taxonomy_id

затем сопоставляет это с записями в wp_term_relationships, которые показывают, какие продукты (пользовательские идентификаторы сообщений) используют эти термины.

WHERE r.object_id IN ($ids)

ограничивает список только теми терминами, которые относятся к продуктам в вашем списке.

Поскольку в этом примере мы запрашиваем x.taxonomy и t.name,

GROUP BY x.taxonomy, t.name

следит за тем, чтобы у вас не было дубликатов. При необходимости вы можете получить дополнительные поля, изменив SELECT.

Итак, как только вы запустите get_results (), у вас должен быть массив объектов, каждый из которых имеет имя таксономии и имя термина. Общая схема будет такой:

+-----------+-------+
| taxonomy1 | term1 |
+-----------+-------+
| taxonomy1 | term2 |
+-----------+-------+
| taxonomy1 | term1 |
+-----------+-------+
| taxonomy2 | term1 |
+-----------+-------+
| taxonomy3 | term1 |
+-----------+-------+
...

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

person Community    schedule 04.03.2015
comment
Привет, bobdye, Спасибо, что нашли время, чтобы отправить ответ выше. К сожалению, у меня только что была возможность опробовать код, поэтому извиняюсь за задержку с ответом! Все, что я получил, запустив предоставленный вами код, - это пустой массив. Не могли бы вы подробнее выяснить, почему это может быть? Заранее будем благодарны за вашу помощь! :-) - person Patrick Kelly; 09.03.2015
comment
Приношу свои извинения, bobdye, запустив запрос прямо в phpMyAdmin, он уведомил меня об ошибке в вашем запросе - wp_term должно быть wp_terms, хотя легко допустить ошибку и, похоже, теперь он работает! - person Patrick Kelly; 09.03.2015