Wordpress - meta_query - можно использовать несколько или вложенные аргументы meta_query? - PullRequest
4 голосов
/ 18 августа 2011

Я использую метапросмотр wordpress, чтобы попытаться построить базовую систему событий.

Каждое событие имеет несколько мета-ключей / значений. Например:

Start Date
End Date
Ongoing (Yes/No)

Я хочу отделить события, которые текущие (текущие = да) и не текущие (текущие = нет).

Затем в рамках моих текущих событий я хочу выделить следующие события:

  1. Начиная с двух недель ИЛИ заканчивая в течение двух недель
  2. Уже началось И заканчивается через две недели

Моя проблема заключается в случае 1 , который по сути:

(Start Date <= Two Weeks OR End Date <= Two Weeks) AND Ongoing == YES

Используя WP_Query, у меня есть следующее:

$ongoingSoon = array(
        'category_name' => 'event',
        'meta_key' => 'End Date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_query' => array(
            'relation' => 'AND',
            array(
                'key' => 'Start Date',
                'value' => $today,
                'compare' => '>='
            ),
            array(
                'key' => 'End Date',
                'value' => $nexttwoweeks,
                'compare' => '<='
            ),
            array(
                'key' => 'Ongoing',
                'value' => 'Yes'
            )
        )
    );

, который возвращает только текущих событий, которые начинаются и также заканчиваются в течение следующих двух недель. Если я поменяю отношение на OR, то оно покажет события, которые также не происходят. Есть ли способ добиться того, что мне нужно?

1 Ответ

2 голосов
/ 23 сентября 2011

Поскольку в настоящее время написано meta_query, я на 99% уверен, что это невозможно сделать.

То, что вы можете сделать, чтобы обойти это - создать (возможно, частную) пользовательскую таксономию для текущей, которая действует как логическое значение и когда-либо использует только один термин («да» или «1» или любой другой ). Ваш WP_Query будет изменен, чтобы выглядеть следующим образом:

$ongoingSoon = array(
    'category_name' => 'event',
    'meta_key' => 'End Date',
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'Start Date',
            'value' => $today,
            'compare' => '>='
        ),
        array(
            'key' => 'End Date',
            'value' => $nexttwoweeks,
            'compare' => '<='
        )
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'ongoing',
            'field' => 'slug',
            'terms' => 'yes'
        )
    )
);
...