Мета-запрос с несколькими логическими (И / ИЛИ)

Я понимаю, что это было задано раньше, но эта функция, похоже, добавлена ​​в 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 ) устраняет эту проблему.