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

10

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

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

Merci

ÉDITER :

Comment ajouter la date de filtrage sur ces messages de 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'
) );
Steffi
la source
N'utilisez pas query_posts (). Vérifiez ceci -> wordpress.stackexchange.com/a/1755/7890
moralida

Réponses:

23

MISE À JOUR 23 décembre 2014

Il existe une meilleure méthode utilisant la date_querypropriété de WP_Queryclasse:

$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 RÉPONSE

Utilisez les paramètres de temps dans WP_Query ()

Citant l'exemple du Codex:

Renvoyer les messages 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' );

Modifier (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 certaines conditions supplémentaires - est la page d'accueil, est 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' );
Moralida
la source
D'accord ! Le filtre est donc maintenant en place $query_string. Mais comment cela fonctionne avec mes arguments dans Query_Posts? (Vérifiez mon montage @Moraleida)
Steffi
1
@Steffi - voir la réponse mise à jour. J'espère que cela ne vous dérange pas, Moraleida.
Stephen Harris
1
venez d'ajouter votre requête actuelle, afin que vous puissiez abandonner immédiatement query_posts. :) Et merci @StephenHarris pour la mise à jour rapide!
moralida
Merci @moraleida! Incroyable ! Juste une chose. Vous avez dit: "Évitez d'utiliser query_posts." Mais il vaut mieux l'utiliser query_posts()dans des fichiers modèles (comme home.php ) que new WP_Query()non?
Steffi
Pas vraiment. query_postsdevrait être utilisé uniquement pour modifier la boucle principale - et beaucoup de gens soutiennent que même pas alors (il y a aussi un the pre_get_postsfiltre pour cela). Je me retrouve souvent à utiliser uniquement WP_Queryou get_postspour toutes mes requêtes car elles sont autonomes et peuvent être utilisées plusieurs fois sans interférer avec quoi que ce soit d'autre. Vérifiez les réponses liées dans vos commentaires pour une explication approfondie. :)
Moralida
3

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 à:

$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
la source
0

Si vous souhaitez obtenir des publications entre deux dates, utilisez les paramètres avant et après dans le paramètre 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
la source