Возможно ли получать сообщения из нескольких мета-ключей/значений в одном запросе?


Скажем, у меня есть куча сообщений, у некоторых из них есть мета-ключ под названием "key1", а у некоторых из них есть мета-ключ под названием "key2". Но в сообщениях нет и того, и другого.

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

После того, как я покопался, самым близким, что у меня есть (для одного запроса), было использование массива meta_query, который позволяет мне запрашивать сообщения с несколькими мета_запросами ключи. Однако я ищу сообщения С несколькими мета-ключами.. т.Е.: если у него есть ключ1 или ключ2, загрузите запрос.

Помимо вышесказанного, единственный другой способ, которым я могу запрашивать сообщения с ключом 1 или ключом 2, - это создать несколько запросов и циклов. Мне интересно, есть ли более чистое решение. Мой идеальный конечный результат состоял бы в том, чтобы результирующий пост смешивался друг с другом и отображался так, как если бы он исходил из одного запроса. С несколькими запросами я чувствую, что не смогу достичь этого, поскольку Сначала я получу результаты с ключом 1, а затем результаты с ключом 2 в следующем запросе/цикле.

Заранее спасибо!

 2
Author: hyp0xia, 2015-09-03

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.

Подробнее по адресу:

 4
Author: Mayeenul Islam, 2015-09-03 07:07:50

Вы можете попробовать добавить еще несколько проверок в свой мета_запрос.

$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-запрос.

 0
Author: certainstrings, 2015-09-03 14:38:12