I don't quite get why this isn't working. I'm trying to use the following to only show posts from the current year on the front page:

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

Yet it still shows posts from 2012 (they weren't actually made in 2012, but I set the publish date to one of the posts that's showing to Feb of last year)

According to the documentation, that's how I should be doing it. Can anyone shed any light?



You just need get current date and add it on data_query in wp_query, Look this:


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


and then use loop:


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


endwhile; endif;


Don't use query_posts to modify your queries. It's a waste of resources and it produces unpredictable results, as it overwrites the original query which happens before the template is loaded.

Use pre_get_posts in your theme's functions.php instead to alter the query before it is sent to the database, and before the template is loaded.

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.