Query posts from current year

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)

Read More

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

Thanks

Related posts

Leave a Reply

2 comments

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

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

    and then use loop:

    <?php 
    
    if ( $query->have_posts() ): while ( $query->have_posts() ) : $query->the_post();
    
    the_title();
    the_content();
    
    endwhile; endif;
    
    ?>
    
  2. 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' );