我正在使用 wordpress 的 meta_query 来尝试构建一个基本的事件系统。
每个事件都有许多元键/值。例如:
Start Date
End Date
Ongoing (Yes/No)
我想区分正在进行(正在进行 = 是)和非正在进行(正在进行 = 否)的事件。
然后在我正在进行的事件中,我想将以下事件分开:
我的问题在于案例 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 创建一个(可能是私有(private)的)自定义分类法,它的行为就像一个 bool 值,并且只使用一个术语("is"或“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'
)
)
);
关于Wordpress - meta_query - 可以使用多个或嵌套的 meta_query 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109390/