Wie werden Beiträge zwischen einem Datum und heute veröffentlicht?

10

Ist es eine Möglichkeit, Beiträge zwischen einem Datum und heute mit zu veröffentlichen query_posts()?

Beispiel: Alle seit dem 01.04.2012 veröffentlichten Beiträge

Vielen Dank

EDIT:

Wie füge ich das Filterdatum zu diesen Abfrageposts hinzu?

query_posts( array(  
    array('post'),
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array('post-format-image')
        )
    ),
    'cat' => '-173',
    'post_status' => 'publish'
) );
Steffi
quelle
Verwenden Sie keine query_posts (). Überprüfen Sie dies -> wordpress.stackexchange.com/a/1755/7890
moraleida

Antworten:

23

UPDATE 23. Dezember 2014

Es gibt eine bessere Methode unter Verwendung der date_queryEigenschaft der WP_QueryKlasse:

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

ALTE ANTWORT

Verwenden Sie die Zeitparameter in WP_Query ()

Zitierbeispiel aus dem Codex:

Rücksendungen der letzten 30 Tage:

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

Bearbeiten (als Antwort auf die aktualisierte Frage des OP).

Vermeiden Sie die Verwendung von query_posts . Sie können die oben beschriebene Technik verwenden, um Ihre Hauptabfrage zu ändern (vorbehaltlich einiger zusätzlicher Bedingungen - ist Homepage, ist eine Seite namens "foobar" usw.):

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' );
Moralida
quelle
In Ordnung ! Der Filter ist also jetzt in $query_string. Aber wie funktioniert es mit meinen Argumenten in Query_Posts? (Überprüfen Sie meine Bearbeitung @ Moraleida)
Steffi
1
@Steffi - siehe aktualisierte Antwort. Ich hoffe, es macht dir nichts aus, Moraleida.
Stephen Harris
1
Sie haben gerade Ihre aktuelle Abfrage hinzugefügt, damit Sie query_posts sofort loswerden können. :) Und danke @StephenHarris für das schnelle Update!
Moralida
Vielen Dank, dass Sie @moraleida! Tolle ! Nur eine Sache. Sie sagten: "Vermeiden Sie die Verwendung von query_posts." Aber es ist besser, query_posts()in Vorlagendateien (wie home.php ) zu verwenden, als new WP_Query(), nein?
Steffi
Nicht wirklich. query_postssollte nur verwendet werden, um die Hauptschleife zu ändern - und viele Leute argumentieren, dass dies auch dann nicht der Fall ist (es gibt auch the pre_get_postsFilter dafür). Ich benutze oft nur WP_Queryoder get_postsfür alle meine Abfragen, da sie eigenständig sind und mehrmals verwendet werden können, ohne irgendetwas anderes zu stören. Überprüfen Sie die verknüpften Antworten in Ihren Kommentaren für eine gründliche Erklärung. :)
Moralida
3

Ab 3.7 können Sie date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters verwenden

Die Argumente, die bestanden wurden, würden also so aussehen:

$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'
);
Kode
quelle
0

Wenn Sie Posts zwischen zwei Daten erhalten möchten, verwenden Sie die Parameter before und after im Parameter 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'
);
pingle60
quelle