Identify which loop you are hooking into; primary or secondary?

What is the most efficient way to determine which loop I’m in?

I have a few plugins that alter the query by hooking into various parts of WP_Query::get_posts(), through the usual suspects, ie posts_where, posts_join, etc. I don’t want to effect every loop on every page though, so right now I’m running a debug_backtrace() and checking for the existence of the main() or query_posts() function as necessary.

Read More

There has to be a more efficient way to identify the primary loop and sub-loops on each page. Something I keep missing when I pore over the query vars and other aspects of the request, something that’s unique to each one. How would you go about doing this?

Related posts

Leave a Reply

2 comments

  1. If secondary loops are called properly (i.e. by not mucking with query_posts(), and by setting a variable $myloop equal to get_posts() or new WP_Query), then identifying said loop is as simple as referencing the variable.

    If you need to call a second loop from within the primary Loop, and you call setup_postdata() in the secondary loop, you may need to call wp_reset_query() when you close your secondary loop, so that your template tags revert to applying to the primary Loop.