WP_QUERY日期范围参数

时间:2013-06-07 作者:That Brazilian Guy

我正在使用events manager plugin 为事件创建自定义帖子。我不需要博客,所以我修改了我的主题index.php 文件(使用子主题)进行查询,以检索主页上的“事件”帖子类型。

new WP_Query ( array( \'paged\' => $paged, \'post_type\' => \'event\', \'posts_per_page\' => 4 ) (我只包括了“事件”帖子类型)。

到目前为止,一切顺利。但它会在主页上显示当前、过去和未来的事件。我希望它只显示当前和未来的事件(即,I want events that haven\'t started yet to be shown on the home page too. I only want to prevent past events from being shown). 我看了一下the codex page for WP_Query 并使用以下代码摘录:

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = \'\' ) {
    // posts for March 1 to March 15, 2010
    $where .= " AND post_date <  CURDATE() ";
    return $where;
}

add_filter( \'posts_where\', \'filter_where\' );
$query = new WP_Query( $query_string );
remove_filter( \'posts_where\', \'filter_where\' )
由于事件日期未存储在上,因此无法生成所需的结果post_date 在DB上。

然而,我认为有一些简单的方法可以引用事件的日期,因为主页上自动显示的日期不是帖子发布日期,而是事件开始日期,没有进行任何修改。

2 个回复
最合适的回答,由SO网友:jerclarke 整理而成

复制自StackOverflow:

WP_Query 提供date_query 参数,允许您设置前后的范围。

https://developer.wordpress.org/reference/classes/wp_query/#date-parameters

$args = array(
    \'date_query\' => array(
        array(
            \'after\'     => \'January 1st, 2015\',
            \'before\'    => \'December 31st, 2015\',
            \'inclusive\' => true,
        ),
    ),
);
$query = new WP_Query( $args );
有关更多详细信息,请参阅链接文档。

请注意,另一个答案(使用Posteta查询)实际上已经过时,现在不应该这样做WP_Query 支持这些日期查询。

SO网友:s_ha_dum

听起来你需要meta_query.

$query = new WP_Query ( 
  array( 
    \'paged\' => $paged, 
    \'post_type\' => \'event\', 
    \'posts_per_page\' => 4,
    \'meta_query\' => array(
      array(
        \'key\' => \'date_key_name\',
        \'value\' => date(\'Y-m-d\'),
        \'compare\' => \'>=\',
      )
    )
  )
);
请注意,您的日期需要采用某种格式a machine can parse correctly.

参考文献

http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

结束