我正在使用wordpress的meta_query来尝试构建一个基本的事件系统.
每个事件都有许多元键/值.例如:
Start Date
End Date
Ongoing (Yes/No)
我想分开正在进行的事件(正在进行中=是)和不正在进行的事件(正在进行中=否).
然后在我的Ongoing事件中,我想分开以下事件:
>在两周内开始或在两周内结束
>已经开始并结束超过两周
我的问题在于案例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,则它会显示不正在进行的事件.有没有办法实现我的需要?
最佳答案 由于目前正在编写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'
)
)
);