I have a query which looks like this:

$args = arguments for the query
$query = new WP_Query($args);

while ($query->have_posts()): $query->the_post();
$post_id = get_the_ID();
echo my_function($post_id);
endwhile; wp_reset_query(); endif;

Then in my_function there's another query with a second function. This second function uses the post_id as input:

$args = arguments for the query, using `$post_id` as input
while ($query->have_posts()): $query->the_post();
// Do stuff
endwhile; wp_reset_query(); endif;

The problem is that the output of the first query (which uses my_function) isn't correct. The query in my_function seems to mess up the loop.

As you can see I use wp_reset_query() and I've also tried wp_reset_postdata(). my_function outputs some post information, among which the title. It displays the title of the current page (the page on which the query is) instead of the title of the post queried, so I think I'm missing something regarding resetting the query.


2 Answers 2


Using wp_reset_query() really just makes sense if you are using query_posts(), which you don't need and shouldn't do - see When should you use WP_Query vs query_posts() vs get_posts()? .

This means you should go with WP_Query and wp_reset_postdata() instead. Besides that you should give your custom, secondary queries a object, name differing from $query - like this:

$your_custom_query = new WP_Query($args);
while ($your_custom_query->have_posts()): $your_custom_query->the_post();
    //post stuff
endwhile; wp_reset_postdata(); endif;
  • I've simplified my question, but I should've mentioned that I am using a custom name for my second query. I ended up storing the title of each post in a variable before the second query and after the second query I can just use the variable (instead of using get_the_title() after the query). The query and functions together are pretty extensive and since my problem is solved (by this slightly hacky workaround) it not necessary to update the question right? I also don't think that I should answer my own question with 'put the values in variables before the second query'...
    – eskimo
    Nov 4, 2013 at 11:54
  • 1
    If you want others to understand what the problem was, which is kind of the point of WPSE, you should update the question. And, you absolutely can answer your own question, but if so it'd be best if you show your solution and not just describe it. @joostvanhoof Nov 4, 2013 at 12:11

Please note: the answer below does fix the problem as described, but it doesn't correct the loop so it stops altering the queried data.

The problem was that functions used after the second query (like get_the_title()) returned titles for the current page the query is on, not the title of the post queried.

So I ended up storing all the values I want in variables, for example $title = get_the_title() BEFORE the second query. Than after the second query these variables can be used because they don't get altered by the second query.

I'm still not sure why the second query alters the data. I've tried renaming the second query and using wp_reset_postdata as suggested, but that didn't fix the problem.

  • I'm pretty certain your workaround shouldn't be necessary, but without seeing your actual code there is no way of knowing what the problem is. Nov 4, 2013 at 14:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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