我正在WordPress网站上的网页上展示"即将到来"和#34;存档"日期范围内的事件使用自定义帖子类型event
的{{1}}和/* upcoming events query */
$event_args = array(
'post_type' => 'event',
'ignore_sticky_posts' => 1,
'posts_per_page' => 10,
'post_status' => 'publish',
'paged' => get_query_var( 'paged' ),
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'event_start_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '>=',
),
array(
'key' => 'event_end_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '>=',
),
),
);
/* archived events query */
$event_args = array(
'post_type' => 'event',
'ignore_sticky_posts' => 1,
'posts_per_page' => 10,
'post_status' => 'publish',
'paged' => get_query_var( 'paged' ),
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'event_start_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '<',
),
array(
'key' => 'event_end_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '<',
),
),
);
自定义字段。我喜欢&#34;即将到来&#34;页面显示当前日期在此范围内和/或等于开始日期或结束日期的帖子;和&#34;档案&#34;页面显示当前日期完全在日期范围之后的事件。因此,如果今天是10月10日,那么日期为10月9日至11日或10月10日至12月的活动将显示在&#34;即将到来&#34;以及之前任何日期的活动都会显示在&#34;已存档&#34;页。
我在下面列出了即将发布和存档页面的查询;即将到来的查询似乎工作正常,但在存档页面中,如果当前日期在日期范围内,它仍然会显示,我希望仅 显示过去的事件:
meta_query
因此,即将发生的事件查询的{{1}}似乎适用于所有情况,但存档页面的行为不符合预期。感谢您在此提供任何帮助,如果我的问题不清楚,请告诉我。 编辑我最初忽略了提及我还需要考虑仅输入开始日期的情景,即单日活动,这被证明是存档页面查询的一个难点。
答案 0 :(得分:1)
在您的存档查询中,您使用了两个meta_query
条件,我认为问题出在第一个条件
第一个条件:event_start_date
array(
'key' => 'event_start_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '<',
),
如果event_start_date
小于current_time
,则会查询所有事件。另请注意,您正在创建OR
关系。
现在,让我们说今天是10月10日,从10月9日到10月12日均匀,上述meta_query
也将包括此事件,因为event_start_date
小于current_time
{1}}。有意义吗?
解决方案是仅包含meta_query
event_end_date
。这样,只会查询结束日期小于current_time
的事件。
/* archived events query */
$event_args = array(
'post_type' => 'event',
'ignore_sticky_posts' => 1,
'posts_per_page' => 10,
'post_status' => 'publish',
'paged' => get_query_var( 'paged' ),
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'event_end_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '<',
),
),
);
<强>更新强>
嵌套的meta_query
逻辑也可以处理单日过去事件。
/* archived events query */
$event_args = array(
'post_type' => 'event',
'ignore_sticky_posts' => 1,
'posts_per_page' => 10,
'post_status' => 'publish',
'paged' => get_query_var( 'paged' ),
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'event_start_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '<',
),
array(
'relation' => 'OR',
array(
'key' => 'event_end_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '<',
),
array(
'key' => 'event_end_date',
'type' => 'DATE',
'value' => NULL,
'compare' => '=',
),
)
),
);