Intereting Posts
связывание таблиц стилей и скриптов с функциями functions.php Поиск разницы в днях Предельная стоимость woocommerce line_total десятичная длина Сообщение для «выбранной категории» в файле archive.php является ли wpdb-> replace () уже дезинфицированным? WordPress get_pages sub nav показать текущую страницу Исключение пользовательской постоянной ссылки WordPress Показывать только начало публикации Как скрыть редактор Visual и Html полностью? Custom Post Field -> Возвращение только слова "array" WordPress не показывает последние сообщения Как я могу заменить адреса электронной почты на адреса BitMessage? Как я могу отправлять автоматические письма в многочисленные роли пользователей WordPress, когда настраиваемое поле обновляется в настраиваемом типе сообщений? Заказ списка сообщений по таксономическим условиям? Почему я получаю случайные комментарии без (необходимого) адреса электронной почты?

Эффективное пересечение таксономии

У меня много пользы для этого, но я хочу узнать, какой из лучших способ сделать то, что будет дорогостоящей операцией.

В качестве примера я буду использовать магазин.

Данный:

  • Таксономия бренда продукта
  • Таксономия товарной группы
  • Тип сообщения продукта
  • Архивные шаблоны для вышеуказанных таксономий

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

Так, например, если я в группе продуктов «женщины», он будет показывать бренды с левой стороны, но только бренды, которые указаны для продуктов в группе продуктов «женские». Например, бренд «Fancy womens clothes Inc» покажет, но не «Manly mens Manly ltd».

Мне нужен общий ответ, хотя я рад за пример использования одежды, и я знаю, как это сделать с помощью жадного алгоритма грубой силой, но это невероятно расточительно, и меня не интересует решение, которое увеличит загрузку каждой страницы на несколько секунд и загрузит все записи в полном объеме из БД в процессе

edit: Пример 2:

Пикачу – желтый покемон и находится в желтом теге, но Пикачу также является электрическим покемоном, поэтому он находится в электрической метке типа таксономии. Как я могу показать только типы покемонов, которые являются желтыми, когда в архиве желтых тегов? например, все зеленые зеленые травяные травы означают, что в желтом архиве не будет пункта меню травы, но там будет зеленый (да, я знаю, есть травяной покемон, который не зеленый)

Обобщение этого вопроса – вопрос об извлечении всех терминов таксономии A, которые имеют должности со специфическим термином таксономии B.

Хотя это не невозможно в несколько шагов и много циклов через сообщения (которые действительно будут неэффективными), я думаю, что разумно пройти через SQL для повышения эффективности.

Мое грубое решение:

/** * Get all terms of $tax_to taxonomy that posts in $term_from of $tax_from have. * * @param string $tax_from taxonomy name * @param string $term_from term slug * @param string $tax_to taxonomy name * * @return array|WP_Error */ function get_intersected_terms( $tax_from, $term_from, $tax_to ) { global $wpdb; $term_from = get_term_by( 'slug', $term_from, $tax_from ); $query = " SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = '{$tax_to}' AND term_taxonomy_id IN ( SELECT term_taxonomy_id FROM {$wpdb->term_relationships} WHERE object_id IN ( SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = {$term_from->term_taxonomy_id} ) ) "; $term_ids = $wpdb->get_col( $query ); if( empty( $term_ids) ) return array(); return get_terms( $tax_to, array( 'include' => $term_ids ) ); } // example var_dump( get_intersected_terms( 'category', 'cat-a', 'post_tag' ) );