Intereting Posts
Сделайте мой блог WordPress помните мой логин "навсегда" Ссылка на изображение родительской темы из дочерней темы Несколько мета-запросов из массива Как добавить статический текст над редактором? Как показать пользовательский тип сообщения с помощью одного meta_value или нескольких meta_value (s) с использованием WP_Query? Woocommerce orderby rand с tax_query не случайный Поиск глобальных переменных Как разместить тему страницы в специальном поле / div? wp_count_posts, wp_count_terms и wp_count_comments для конкретного пользователя? WP frontend выходных полей пользовательских текстовых полей, не соблюдающих разрывы строк. В admin это нормально реализация фотогалереи как tmz Сравнение времени с the_time (); как я могу установить пост-автора сообщения, которое я только что создал с помощью php? Отключение формы входа и перенаправление пользователей при выходе из системы без заголовков отправлено php warning как заставить WordPress отправлять комментарии на внешнюю страницу

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.

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 показывает сообщения