Wordpress - meta_query - 可以使用多个或嵌套的meta_query参数吗?

时间:2011-08-18 14:48:45

标签: wordpress logic meta custom-fields

我正在使用wordpress'meta_query来尝试构建一个基本的事件系统。

每个事件都有许多元键/值。例如:

Start Date
End Date
Ongoing (Yes/No)

我想分开正在进行的事件(正在进行中=是)和未正在进行的事件(正在进行中=否)。

然后在我的正在进行的事件中,我想分开以下事件:

  1. 两周内开始或两周内结束
  2. 已经开始并结束超过两周
  3. 我的问题在于案例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'
                )
            )
        );
    

    仅返回正在进行的事件,这些事件在接下来的两周内开始 AND ALSO 结束。如果我将关系更改为OR,则它会显示不正在进行的事件。有没有办法实现我的需要?

1 个答案:

答案 0 :(得分:2)

由于目前正在编写meta_query,我99%肯定不可能这样做。

可以做什么来解决这个问题,就是为Ongoing创建一个(可能是私有的)自定义分类法,它就像一个布尔值,只使用一个术语('是'或'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'
        )
    )
);