如何获取日期和今天之间发布的帖子?


10

是否可以通过这种方式在日期和今天之间发布帖子query_posts()

例如:所有文章发表以来2012-04-01

谢谢

编辑:

如何在此查询中添加过滤日期?

query_posts( array(  
    array('post'),
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array('post-format-image')
        )
    ),
    'cat' => '-173',
    'post_status' => 'publish'
) );


不要使用query_posts()。检查此-> wordpress.stackexchange.com/a/1755/7890
Morideida'5

Answers:


23

更新2014年12月23日

有一个使用class date_query属性的更好的方法WP_Query

$args = array(
    'post_type' => 'post', 
    'tax_query' => array(
        array( 
            'taxonomy'  => 'post_format',
            'field'     => 'slug',
            'terms'     => array( 'post-format-image' )
        )
    ),
    'cat'           => '-173',
    'post_status'   => 'publish',
    'date_query'    => array(
        'column'  => 'post_date',
        'after'   => '- 30 days'
    )
);
$query = new WP_Query( $args );

老答案

在WP_Query()中使用时间参数

引用食典中的示例:

最近30天内的发回帖子:

// This takes your current query, that will have the filtering part added to.
$query_string = array(
    'post_type' => 'post', 
    'tax_query' => array(
        array(
            'taxonomy'  => 'post_format',
            'field'     => 'slug',
            'terms'     => array( 'post-format-image' )
        )
    ),
    'cat'           => '-173',
    'post_status'   => 'publish'
);

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts in the last 30 days
    $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

编辑 (针对OP的更新问题)。

避免使用query_posts。您可以使用上述技术来更改您的主查询(受一些附加条件的影响 -是主页,是名为'foobar'的页面,等等):

function wpse52070_filter_where( $where = '' , $query ) {
   if( $query->is_main_query() && is_page( 'foobar' ) ){
      // posts in the last 30 days
      $where .= " AND post_date > '" . date( 'Y-m-d', strtotime( '-30 days' ) ) . "'";
   }

    return $where;
}
add_filter( 'posts_where', 'wpse52070_filter_where' );

好 !因此,过滤器现在处于$query_string。但是它如何与Query_Posts中的args一起使用?(检查我的编辑@Moraleida)
Steffi

1
@Steffi-查看最新答案。希望您不要介意,Moraleida。
Stephen Harris

1
刚刚添加了当前查询,因此您可以立即放弃query_posts。:)并且感谢@StephenHarris的快速更新!
Morideida

谢谢@moraleida!惊人 !就一件事。您说:“避免使用query_posts。” 但是,最好query_posts()在模板文件(例如home.php)中使用new WP_Query(),不是吗?
斯特菲2012年

并不是的。query_posts应该只用于更改主循环-很多人甚至都认为不行(也有the pre_get_posts过滤器)。我经常发现自己仅使用WP_Queryget_posts用于所有查询,因为它们是独立的,可以多次使用,而不会干扰其他任何内容。检查评论中链接的答案以得到全面的解释。:)
Morideida

3

从3.7开始,您可以使用date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

因此,传递的参数看起来像:

$query_string = array(
      'post_type' => 'post', 
      'date_query' => array(
        'after' => '2012-04-01' 
      ),
      'tax_query' => array(
          array( 
             'taxonomy' => 'post_format',
             'field' => 'slug',
             'terms' => array('post-format-image')
          )
      ),
      'cat' => '-173',
      'post_status' => 'publish'
);

0

如果您希望在两个日期之间获取帖子,请在date_query参数中使用before和after参数,

$query_string = array(
  'post_type' => 'post', 
  'date_query' => array(
    'column' => 'post_date',
    'after' => '2012-04-01',
    'before' => '2012-04-30' 
  ),
  'tax_query' => array(
      array( 
         'taxonomy' => 'post_format',
         'field' => 'slug',
         'terms' => array('post-format-image')
      )
  ),
  'cat' => '-173',
  'post_status' => 'publish'
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.