Я делаю 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, а второй более правильный, но сложный:
Чем проще:
array( 'key' => 'wpl_location', 'value' => '"' . $my_value . '"', 'compare' => 'LIKE' ),
По сравнению с лучшими, но более сложными:
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', ), ), );
Это приведет к поиску сериализованных данных для всего, что выглядит как «Европа».