web-dev-qa-db-fra.com

Comment faire pour publier des articles entre une date et aujourd'hui?

Est-ce un moyen de publier des articles entre une date et aujourd'hui avec query_posts()?

Exemple: Tous les articles publiés depuis - 2012-04-01

Merci

MODIFIER :

Comment ajouter la date du filtre sur cette requête?

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

UPDATE 23 décembre 2014

Il existe une meilleure méthode utilisant la propriété date_query de la classe 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 );

ANCIENNE REPONSE

Utilisez les paramètres Time dans WP_Query ()

Citant l'exemple du Codex:

Articles de retour des 30 derniers jours:

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

Edit (en réponse à la question mise à jour du PO).

Évitez d'utiliser query_posts . Vous pouvez utiliser la technique ci-dessus pour modifier votre requête principale (sous réserve de quelques conditionals supplémentaires - est la page d'accueil, une page appelée 'foobar', etc.):

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

Depuis la version 3.7, vous pouvez utiliser date_query http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Ainsi, les arguments passés ressembleraient à ceci:

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