Я понимаю, что это было задано раньше, но эта функция, похоже, добавлена в v4.1, и принятые ответы не помогают (они до 4.1).
Как я могу «связывать» мета-запросы с помощью AND и OR? Я нашел это обновление для улучшения запросов в 4.1, но я не могу понять, что синтаксис корректен для моего приложения.
Я хотел бы запросить сообщения, flagged
не 1
AND
( expiry_date
в будущем OR
blank)
Я попытался переупорядочить массивы и «отношения» без эффекта (в базе данных есть определенные записи в базе данных, которые соответствуют этому запросу).
Часть даты запроса работает нормально, но добавление flagged
запроса не возвращает сообщений.
'meta_query' => array( 'relation' => 'AND', array( 'key' => 'flagged', 'value' => '1', 'compare' => '!=' ), array( 'relation' => 'OR', array( 'key' => 'expiry_date', 'value' => date('Ym-d',strtotime("today")), 'compare' => '>=', 'type' => 'DATETIME', ), array( //has no date 'key' => 'expiry_date', 'value' => '', 'compare' => '=' ) ) )
Правильный синтаксис для выполнения AND OR выглядит следующим образом:
'meta_query' => array( 'relation' => 'AND', array( 'key' => 'flagged', 'value' => '1', 'compare' => '!=' ), array( 'relation' => 'OR', array( 'key' => 'expiry_date', 'value' => date('Ym-d',strtotime("today")), 'compare' => '>=', 'type' => 'DATETIME', ), array( //has no date 'key' => 'expiry_date', 'value' => '', 'compare' => '=' ) ) )
В качестве побочного примечания, кажется, что post meta, которые установлены в NULL
(например, flagged
), не будут возвращены этим запросом. Установка на любое другое значение (например, 0
) устраняет эту проблему.