Intereting Posts
Заставить пользователей переходить Как перезагрузить определенную регистрационную форму роли на ошибках проверки? Pagination Не работает на домашней странице с 2 запросами Получать сообщения в подкатегории выбранного родителя Есть ли альтернатива WP_List_Table? Как добавить метасимвол по умолчанию для предотвращения ошибки? Изменить количество столбцов виджетов на панели управления? Как отображать сообщения об ошибках с использованием класса WP_Error? WP_Query и next_posts_link Как использовать код глобальной категории Как настроить htaccess для перенаправления определенного типа сообщения или подкаталога на HTTPS? Как «отвязать» / удалить регистр jQuery, чтобы он не назывался частью wp_footer () ;? WP Multisite – Как создать настраиваемый «роутер» для префиксов блога? Как включить шрифты Google Есть ли способ иметь двойной WP-канал (полный / частичный)?

Meta Query не работает как ожидаемый

У меня есть небольшая проблема с мета-запросами. I Разработал запрос на получение сообщений, где любое из этих слов существует в настраиваемом поле pickup_address. поле имеет эту строку в мета-значении: 43 Longview Drive, Papamoa

РЕДАКТИРОВАТЬ

это мета-запрос, который использует Im:

$args = array( 'post_type' => 'posts', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'pickup_address', 'value' => 'Papamoa', 'compare' => 'LIKE', ), array( 'key' => 'pickup_address', 'value' => 'Bah a', 'compare' => 'LIKE', ), array( 'key' => 'pickup_address', 'value' => 'de', 'compare' => 'LIKE', ), array( 'key' => 'pickup_address', 'value' => 'Plenty', 'compare' => 'LIKE', ), ), 

);

это код, который я генерирую из мета-запросов:

 SELECT SQL_CALC_FOUND_ROWS wpiw_posts.ID FROM wpiw_posts INNER JOIN wpiw_postmeta ON ( wpiw_posts.ID = wpiw_postmeta.post_id ) WHERE 1=1 AND ( ( ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Papamoa%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Bah a%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%de%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Plenty%' ) ) ) AND wpiw_posts.post_type = 'project' AND ((wpiw_posts.post_status = 'publish')) GROUP BY wpiw_posts.ID ORDER BY wpiw_posts.post_date DESC LIMIT 0, 10 

Я попытался заменить специальный символ , но не работает ни

WordPress ничего не дает мне в Wp_Query ($ query_args), но если я запустил это в MySql, он работает. Любая помощь может быть оценена

EDIT 2

Я беру запрос, который WordPress выполняет на MySql после преобразования аргументов meta_query:

 SELECT SQL_CALC_FOUND_ROWS wpiw_posts.ID FROM wpiw_posts INNER JOIN wpiw_postmeta ON ( wpiw_posts.ID = wpiw_postmeta.post_id ) INNER JOIN wpiw_postmeta AS mt1 ON ( wpiw_posts.ID = mt1.post_id ) WHERE 1=1 AND ( ( ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Papamoa%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%BahÃa%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%de%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Plenty%' ) ) AND ( mt1.meta_key = 'deliver_address' AND mt1.meta_value LIKE '%Auckland%' ) ) AND wpiw_posts.post_type = 'project' AND ((wpiw_posts.post_status = 'publish')) GROUP BY wpiw_posts.ID ORDER BY wpiw_posts.post_date DESC LIMIT 0, 10 

Я замечаю странную хижину «BahÃa», но когда я беру этот запрос и запускаю его на MySql, он работает! извлекает 1 строку, потому что у одного сообщения есть поле pickup_address со словом Papamoa и есть поле deliver_address с работой Auckland.

Solutions Collecting From Web of "Meta Query не работает как ожидаемый"

Mariolex,

Вы пытались использовать meta_query? Я написал что-то быстро и непроверено, но это может сделать трюк:

 $args = array( 'post_type' => 'posts', 'showposts' => '-1', 'meta_query' => array( array( 'key' => 'pickup_address', //meta_key 'value' => '43 Longview Drive, Papamoa', //meta_value 'compare' => 'LIKE', //compare ), ), ); $query = new WP_Query( $args ); print_r($query); 

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

Обязательно ознакомьтесь с документацией Meta Query на WordPress.org – это мощный инструмент, который я использую все время для подобных ситуаций.

Источники:

РЕДАКТИРОВАТЬ

Я неправильно понял ваш запрос, когда впервые прочитал его. Вы можете попробовать это, чтобы узнать, получаете ли вы соответствие для значения «43 Longview Drive, Papamoa».

 $args = array( 'post_type' => 'posts', 'showposts' => '-1', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'pickup_address', //meta_key 'value' => 'Papamoa', //meta_value 'compare' => 'LIKE', //compare ), array( 'key' => 'pickup_address', //meta_key 'value' => 'Bah a', //meta_value 'compare' => 'LIKE', //compare ), array( 'key' => 'pickup_address', //meta_key 'value' => 'de', //meta_value 'compare' => 'LIKE', //compare ), array( 'key' => 'pickup_address', //meta_key 'value' => 'Plenty', //meta_value 'compare' => 'LIKE', //compare ), ), ); $query = new WP_Query( $args ); 

Возможно, вам нужно переключить RELATION на «или», если вы ищете оба.

После долгого отладки я понял, что произошло.

Кажется, WordPress не очень хорошо латит латинскую пунктуацию, как акцентированные гласные (á, é, í, ó, ú) и другие персонажи.

используя этот метод: Замена акцентированных символов php Я меняю гласные, отправляя данные на MySql, и теперь WordPress показывает сообщения