Enumerating posts in Wordpress won't work twice

60 views Asked by At

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.

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?

1

There are 1 answers

0
SuperDisk On BEST ANSWER

I just removed the wp_reset_query() and it worked. (Even though Wordpress tells you to call that!?)