Intereting Posts
Контактная форма 7 в пользовательском файле php Как включить этот файл jQuery в wordpress? Как создать связанный список тегов на боковой панели Изображения, которые не отображаются на мобильном сафари Как показать имя короткого кода в панели управления администратора Меню пользовательской панели не остается открытым для пользовательской таксономии Получить страницы только с определенной таксономией Установите тип ссылки по умолчанию на «файл» для галерей изображений Просмотр собственных сообщений при входе в систему Содержимое дочерних страниц с разбивкой по страницам на родительской странице Добавить раздел в пользовательскую панель меню Проблема обновления SSH Язык Polylang не по умолчанию игнорирует теги в WP_Query Как получить этот скрипт jQuary? Просмотр статистики самостоятельно размещенного сайта из приложения Android WordPress

Выполните большой WP_Query со многими «И» Meta_Queries?

У меня есть пользовательский product типа post. Посетители могут искать products со многими фильтрами. Они могут устанавливать color , size , price и т. Д. Детали продукта хранятся в дополнительных пользовательских полях (ACF) .

Моим решением был WP_Query с meta_queries . Все WP_Meta_Queries находятся в AND отношениях.

Моя проблема: если посетитель создает больше фильтра для продукта, запрос всегда будет медленнее. Я думаю, что проблема wp_postmeta INNER JOIN s на wp_postmeta . На этом столе у ​​меня шесть INNER JOIN .

Есть ли решение этой проблемы?

Solutions Collecting From Web of "Выполните большой WP_Query со многими «И» Meta_Queries?"

Возможно, вам понадобится решение на 180 °.) Еще раз подумайте о проблеме и попробуйте следующее:

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

Таким образом, ваше решение может быть:

 ... JOIN ... (A) ... (B) ... (C) WHERE (A.meta_key = 'color' AND A.meta_value = 'red') OR (B.meta_key = 'color' AND B.meta_value = 'blue') ... AND (C.meta_key = 'size' AND C.meta_value = 1) ... 

Но на самом деле вы можете удалить некоторые соединения, используя IN :

 JOIN ... (A) ... (B) WHERE (A.meta_key = 'color' AND A.meta_value IN ('red', 'yellow')) AND (B.meta_key = 'size' AND B.meta_value IN (1, 2, 3)) 

Поэтому начните использовать «IN» для сравнения значений, например, в руководстве :

 $args = array( 'post_type' => 'my_custom_post_type', 'meta_key' => 'age', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'age', 'value' => array( 3, 4 ), 'compare' => 'IN', ), ), ); $query = new WP_Query( $args ); 

Вы даже можете начать гадать и иметь его только с одним или без участия:

 WHERE meta_key IN ('color', 'size') AND meta_value IN ('red', 'blue', 123, 45) 

Это было бы быстро, но могло бы закончиться множеством ложных срабатываний.

если вы используете woocommerce, вы можете просто использовать расширенные фильтры продуктов ajax

Этот плагин поможет вам со всеми мета-сообщениями.