日付と今日の間に投稿を公開する方法は?


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

2014年12月23日更新

クラスの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' );

OK !したがって、フィルターはにあり$query_stringます。しかし、それはQuery_Postsの私の引数でどのように機能しますか?(私の編集@Moraleidaを確認してください)
Steffi

1
@Steffi-更新された回答を参照してください。追加、モラレイダを気にしないでください。
スティーブンハリス

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を使用できます

したがって、渡される引数は次のようになります。

$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

2つの日付の間で投稿を取得する場合は、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'
);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.