Возможно ли получать сообщения из нескольких мета-ключей/значений в одном запросе?
Скажем, у меня есть куча сообщений, у некоторых из них есть мета-ключ под названием "key1", а у некоторых из них есть мета-ключ под названием "key2". Но в сообщениях нет и того, и другого.
Я хотел бы создать пользовательский запрос, который извлекает любую запись, содержащую "ключ1" или "ключ2" в качестве мета-ключа. (ни одного поста, в котором есть и то, и другое).
После того, как я покопался, самым близким, что у меня есть (для одного запроса), было использование массива meta_query, который позволяет мне запрашивать сообщения с несколькими мета_запросами ключи. Однако я ищу сообщения С несколькими мета-ключами.. т.Е.: если у него есть ключ1 или ключ2, загрузите запрос.
Помимо вышесказанного, единственный другой способ, которым я могу запрашивать сообщения с ключом 1 или ключом 2, - это создать несколько запросов и циклов. Мне интересно, есть ли более чистое решение. Мой идеальный конечный результат состоял бы в том, чтобы результирующий пост смешивался друг с другом и отображался так, как если бы он исходил из одного запроса. С несколькими запросами я чувствую, что не смогу достичь этого, поскольку Сначала я получу результаты с ключом 1, а затем результаты с ключом 2 в следующем запросе/цикле.
Заранее спасибо!
2 answers
Простой запрос, подобный следующему, должен работать для вас:
<?php
$_query = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => -1,
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'key1'
),
array(
'key' => 'key2'
),
),
) );
?>
Обратите внимание на 'relation'=>'OR'
в meta_query
.
Подробнее по адресу:
Вы можете попробовать добавить еще несколько проверок в свой мета_запрос.
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'meta_query' => array(
'relation' => 'OR',
array(
'relation' => 'AND', // make sure only this key exists by matching parameters
array(
'key' => 'key1',
'compare' => 'EXISTS'
),
array(
'key' => 'key2',
'compare' => 'NOT EXISTS'
)
),
array(
'relation' => 'AND', // check for the opposite here
array(
'key' => 'key2',
'compare' => 'EXISTS'
),
array(
'key' => 'key1',
'compare' => 'NOT EXISTS'
)
)
)
);
Это ок решение, если вы сравниваете только два мета-ключа, но, возможно, было бы чище написать sql-запрос.