web-dev-qa-db-fra.com

Requêtes de l'année en cours

Je ne comprends pas vraiment pourquoi ça ne marche pas. J'essaie d'utiliser ce qui suit pour afficher uniquement les publications de l'année en cours sur la page d'accueil:

<?php query_posts( "&year=$current_year&order=DESC"); ?>

Pourtant, les messages de 2012 sont toujours affichés (ils n’ont pas été publiés en 2012, mais j’ai fixé la date de publication à l’un des messages affichés en février de l’année dernière).

Selon la documentation, c'est comme ça que je devrais le faire. Quelqu'un peut-il nous éclairer?

Merci

2
Phill

Vous devez juste obtenir la date actuelle et l'ajouter à data_query dans wp_query, regardez ceci:

<?php 

$getdate = getdate();
$args = array(
    'date_query' => array(
        array(
            'year'  => $getdate["year"]
        ),
    ),
);
$query = new WP_Query( $args );

?>

puis utilisez la boucle:

<?php 

if ( $query->have_posts() ): while ( $query->have_posts() ) : $query->the_post();

the_title();
the_content();

endwhile; endif;

?>
5
Behzad G.

N'utilisez pas query_posts pour modifier vos requêtes. C'est un gaspillage de ressources qui produit des résultats imprévisibles, car il écrase la requête d'origine, ce qui se produit avant le chargement du modèle.

Utilisez pre_get_posts dans le functions.php de votre thème à la place pour modifier la requête avant elle est envoyée à la base de données et avant que le modèle ne soit chargé.

function home_page_current_year( $query ){
    if( $query->is_home() && $query->is_main_query() )
        $query->set( 'year', date('Y') );
}
add_action( 'pre_get_posts', 'home_page_current_year' );
1
Milo