Intereting Posts
Пользовательская тема не будет использовать search.php Регистрация электронной почты с помощью AJAX Перенаправление участников на пользовательскую страницу при входе в систему через WP admin Отображать пользовательское сообщение, если пользовательское поле отмечено В чем разница в ограничениях памяти WP? Как исправить параметр экрана панели инструментов WordPress и кнопку помощи, она не работает Невозможно проверить вариант «Разрешить пользователям отправлять комментарии по новым статьям» Как я могу изменить отображение одной категории? как вызвать функцию только на определенных страницах и исключить ее из других страниц Добавить всплывающее окно подтверждения javascript на ссылку «Переместить в корзину» Кнопка wp_update_post onclick с использованием ajax Динамическое присвоение настраиваемого шаблона настраиваемым сообщениям типа post Поля ссылок в списке «Администратор пользователя» Обращение к неопределенной функции Как массировать только один ключ из другого массива

Сообщения WP_Query по метаданным из дерева вариантов

Я делаю WP_Query пытаясь отфильтровать сообщения по метаданным.

  $args = array( 'ignore_sticky_posts'=> 1, 'post_type' => 'post_projects', 'post_status' => 'publish', 'posts_per_page' => $nr_posts, 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'wpl_goal_amount', 'value' => 100, 'compare' => '!=', ), array( 'key' => 'wpl_location', 'value' => 'Europe', 'compare' => '=', ), ), ); 

Я тестирую это с двумя сообщениями. У одного из них есть «Европа» в его множестве мест, но всякий раз, когда я запускаю это, ничего не получается.

ОБНОВЛЕНИЕ ВОПРОСА:

Я использую Дерево опций для сохранения метаданных, и, как упоминалось в предыдущем ответе, он хранит сериализованные метаданные сообщения (по умолчанию WordPress), и в сочетании с этим и другим сообщением я обнаружил, что есть два способы запроса сериализованных данных. Первый более удобен, но больше из jerry-rig, а второй более правильный, но сложный:

  1. Чем проще:

      array( 'key' => 'wpl_location', 'value' => '"' . $my_value . '"', 'compare' => 'LIKE' ), 
  2. По сравнению с лучшими, но более сложными:

      array( 'key' => 'wpl_location', 'value' => serialize(array(3 => 'Europe')), 'compare' => 'LIKE' ), 

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

Мой обновленный вопрос:

Должен ли я продолжать этот путь и использовать первый метод, или мне нужно сбросить дерево вариантов и выяснить способ добавления метаданных к сообщениям в неэтериализованной форме, чтобы можно было запросить их?

Возможно, вам не хватает аргумента meta_key:

 $args = array( 'ignore_sticky_posts'=> 1, 'meta_key' => 'wpl_location', // here 'post_type' => 'post_projects', 'meta_query' => array( array( 'key' => 'wpl_location', 'value' => 'Europe', 'compare' => 'IN', ), ), ); 

source: https://codex.wordpress.org/Class_Reference/WP_Query (примерно три четверти вниз по странице).

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

 $args = array( 'ignore_sticky_posts'=> 1, 'post_type' => 'post_projects', 'meta_query' => array( array( 'key' => 'wpl_location', 'value' => '%Europe%', 'compare' => 'LIKE', ), ), ); 

Это приведет к поиску сериализованных данных для всего, что выглядит как «Европа».