WordPress:按日期范围查询帖子

时间:2017-10-11 00:26:54

标签: php wordpress date custom-wordpress-pages

我正在WordPress网站上的网页上展示&#34;即将到来&#34;和#34;存档&#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}}似乎适用于所有情况,但存档页面的行为不符合预期。感谢您在此提供任何帮助,如果我的问题不清楚,请告诉我。 编辑我最初忽略了提及我还需要考虑仅输入开始日期的情景,即单日活动,这被证明是存档页面查询的一个难点。

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' => '=',
            ),
        )
    ),
);