วิธีการโพสต์เผยแพร่ระหว่างวันที่และวันนี้?


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
moraleida

คำตอบ:


23

อัพเดท 23 ธันวาคม 2557

มีวิธีที่ดีกว่าโดยใช้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 ()

ตัวอย่างข้อความจาก Codex:

ส่งคืนโพสต์จาก 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มา แต่มันทำงานกับ args ของฉันใน Query_Posts ได้อย่างไร (ตรวจสอบการแก้ไขของฉัน @Moraleida)
Steffi

1
@Steffi - ดูคำตอบที่ปรับปรุงแล้ว ฉันหวังว่าคุณจะไม่สนใจการเพิ่ม Moraleida
Stephen Harris

1
เพิ่งเพิ่มคิวรีปัจจุบันของคุณเพื่อให้คุณสามารถวางเคียวรี query_posts ได้ทันที :) และขอขอบคุณ @StephenHarris สำหรับการอัพเดทด่วน!
moraleida

ขอบคุณ @moraleida! น่าทึ่ง! เพียงสิ่งหนึ่ง. คุณพูดว่า: "หลีกเลี่ยงการใช้ query_posts" แต่จะดีกว่าที่จะใช้query_posts()ในไฟล์เทมเพลต (เช่นhome.php ) มากกว่าnew WP_Query()ไม่ใช่หรือ?
Steffi

ไม่ได้จริงๆ query_postsควรใช้เพียงเพื่อเปลี่ยนลูปหลัก - และผู้คนจำนวนมากยืนยันว่าแม้ในตอนนั้น (มีthe pre_get_postsตัวกรองสำหรับสิ่งนั้นด้วย) ฉันมักจะพบว่าตัวเองใช้เพียงอย่างเดียวWP_Queryหรือget_postsสำหรับคำถามทั้งหมดของฉันเนื่องจากมันเป็นแบบสแตนด์อโลนและสามารถใช้งานได้หลายครั้งโดยไม่รบกวนสิ่งอื่น ตรวจสอบคำตอบที่เชื่อมโยงกับความคิดเห็นของคุณสำหรับคำอธิบายอย่างละเอียด :)
moraleida

3

ในฐานะ 3.7 คุณสามารถใช้ date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

ดังนั้น args ที่ผ่านไปจะมีลักษณะดังนี้:

$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

$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'
);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.