Enumerating posts in WordPress won’t work twice

This method was posted by someone on the WordPress forum to get the post “number” (1, 2, 3, 4, etc) from its ID (Which is not sequentially ordered). I modified it a bit to only query for slides.

function Get_Post_Number($postID){
    $temp_query = $wp_query;
    $postNumberQuery = new WP_Query(array(
        'ignore_sticky_posts' => 1,
        'posts_per_page' => 20,
        'post_type' => 'slide'));

    $counter = 0;
    $postCount = 0;
    if($postNumberQuery->have_posts()) :
        while ($postNumberQuery->have_posts()) : $postNumberQuery->the_post();
            if ($postID == get_the_ID()){
                $postCount = $counter;
            } else {
                $counter++;
            }
    endwhile; endif;
    wp_reset_query();
    $wp_query = $temp_query;
    return $postCount;
}

It works fine when called once, and will return the correct number.

Read More
Get_Post_Number(get_the_ID()) //Returns 3 (for instance)

But when called twice, it no longer works:

Get_Post_Number(get_the_ID()) //Returns 3 (for instance)
Get_Post_Number(get_the_ID()) //Returns 0 (wrong!)

This leads me to believe that the function has side-effects, but I’m not sure how to undo them. WordPress says to call wp_reset_query() after you do your own “custom loop,” but the function already does that.

What should I do?

Related posts

Leave a Reply

1 comment