Làm thế nào để có được bài viết được xuất bản giữa một ngày và ngày hôm nay?


10

Đây có phải là một cách để có được các bài đăng được xuất bản giữa một ngày và ngày hôm nay với query_posts()?

Ví dụ: Tất cả các bài đăng được xuất bản từ 2012-04-01

Cảm ơn

BIÊN TẬP :

Làm cách nào để thêm ngày lọc trên Bài viết truy vấn này?

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


Không sử dụng query_posts (). Kiểm tra cái này -> wordpress.stackexchange.com/a/1755/7890
moraleida

Câu trả lời:


23

CẬP NHẬT ngày 23 tháng 12 năm 2014

Có một phương thức tốt hơn bằng cách sử dụng date_querythuộc tính của WP_Querylớp:

$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 );

TRẢ LỜI

Sử dụng tham số thời gian trong WP_Query ()

Trích dẫn ví dụ từ Codex:

Trả lại bài viết từ 30 ngày qua:

// 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' );

Chỉnh sửa (để trả lời câu hỏi cập nhật của OP).

Tránh sử dụng query_posts . Bạn có thể sử dụng kỹ thuật trên để thay đổi truy vấn chính của mình (theo một số điều kiện bổ sung - là trang chủ, là một trang có tên 'foobar', v.v.):

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

Đồng ý ! Vì vậy, bộ lọc bây giờ là trong $query_string. Nhưng làm thế nào nó hoạt động với các đối số của tôi trong Query_Posts? (Kiểm tra chỉnh sửa của tôi @Moraleida)
Steffi

1
@Steffi - xem câu trả lời cập nhật. Tôi hy vọng bạn không quan tâm đến việc bổ sung, Moraleida.
Stephen Harris

1
chỉ cần thêm truy vấn hiện tại của bạn, vì vậy bạn có thể bỏ truy vấn_posts ngay lập tức. :) Và cảm ơn @StephenHarris vì đã cập nhật nhanh chóng!
moraleida

Cảm ơn bạn @moraleida! Kinh ngạc ! Một điều nữa thôi. Bạn nói: "Tránh sử dụng query_posts." Nhưng nó là tốt hơn để sử dụng query_posts()trong các tệp mẫu (chẳng hạn như home.php ) hơn new WP_Query(), không?
Steffi

Không hẳn vậy. query_postschỉ nên được sử dụng để thay đổi vòng lặp chính - và rất nhiều người tranh luận rằng thậm chí sau đó (cũng có the pre_get_postsbộ lọc cho điều đó). Tôi thường thấy mình chỉ sử dụng WP_Queryhoặc get_postscho tất cả các truy vấn của mình vì chúng là độc lập và có thể được sử dụng nhiều lần mà không can thiệp vào bất cứ điều gì khác. Kiểm tra các câu trả lời được liên kết trên ý kiến ​​của bạn để được giải thích kỹ lưỡng. :)
moraleida

3

Kể từ 3.7, bạn có thể sử dụng date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameter

Vì vậy, các đối số được thông qua sẽ trông giống như:

$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

Nếu bạn muốn nhận bài đăng giữa hai ngày, sau đó sử dụng tham số trước và sau trong tham số date_query,

$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'
);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.