Title: [loop] within an existing post loop? possible?
Last modified: August 21, 2016

---

# [loop] within an existing post loop? possible?

 *  Resolved [joshuairl](https://wordpress.org/support/users/joshuairl/)
 * (@joshuairl)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/)
 * It seems to not display the right post type and/or changes the post-type of the
   loop it’s nested within…
 * I have a current screen that’s similar to an “archive” list.
 * It’s looping through within the templates.
 * Then, I use your plugin with [loop] in one of those posts and it seems to goof?
 * Is this intended or am I doing something wrong?
 * [https://wordpress.org/plugins/custom-content-shortcode/](https://wordpress.org/plugins/custom-content-shortcode/)

Viewing 9 replies - 1 through 9 (of 9 total)

 *  Thread Starter [joshuairl](https://wordpress.org/support/users/joshuairl/)
 * (@joshuairl)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5023930)
 * Okay, this screenshot might help outline my issue…
 * [https://www.dropbox.com/s/ifqownefubn9ieu/Screenshot%202014-06-19%2009.36.36.png](https://www.dropbox.com/s/ifqownefubn9ieu/Screenshot%202014-06-19%2009.36.36.png)
 * It starts out as a main hardcoded loop in the template for post type of “home-
   sections” and then it hits my [loop] post and things go nuts.
 * [loop type=”product”]
    [content field=”image”] [/loop]
 * It’s supposed to pull “product” posts only. The [content field=”image”] is in
   fact pulling the the product images but it somehow changes the_title() to my “
   special-guests” post type which is COMPLETELY UNRELATED to any of the post types
   I’m even referencing… :-/
 * I’m very confused.
 *  Plugin Author [Eliot Akira](https://wordpress.org/support/users/miyarakira/)
 * (@miyarakira)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5023977)
 * Hmm, that is strange behavior. From the screenshot it looks like the main hardcoded
   loop is trying to get the special-guests posts (div id=”post-229″..)
 * From what you describe, I believe the issue is that the [loop] shortcode is not
   resetting the query after it’s done, and interfering with the main hardcoded 
   loop that it’s in. I’ll set up a test case and see if I can reproduce the issue–
   will let you know when I figure something out.
 *  Thread Starter [joshuairl](https://wordpress.org/support/users/joshuairl/)
 * (@joshuairl)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5023979)
 * Thank you thank you for the prompt response.
    I’ve also double checked all my
   variables and ensured they were scoped / named properly as to avoid possible 
   conflicts or overrides.
 * It’s definitely funky.
 * I’ve added wp_reset_postdata(); to my loops too and it doesn’t help… can’t seem
   to figure it out on my own 🙁
 *  Thread Starter [joshuairl](https://wordpress.org/support/users/joshuairl/)
 * (@joshuairl)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5023985)
 * Maybe it would be useful to somehow be able to provide a name to the loop.
    Similar
   to CFML (ColdFusion)… <cfquery name=”my-custom-loop”> SELECT * FROM BLAH; </cfquery
   > <cfloop query=”my-custom-loop”> #my-custom-loop.id# #my-custom-loop.image# 
   </cfloop>
 * Your plugin reminds me a lot of CFML and that’s why I’m using it as a reference.
 * Yours could just do something like:
 * [loop name=”my-lil-loop” post-type=”product”]
 * [/loop]
 * Which could define some sort of custom “scope” for the query / for loop to live
   in and respect?
 * I guess my biggest problem is I don’t understand the logic behind the wordpress“
   Loop” well enough to understand the core of the issue with nesting loops.
 * If I can help in any way, let me know! Thanks!
 *  Plugin Author [Eliot Akira](https://wordpress.org/support/users/miyarakira/)
 * (@miyarakira)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5023994)
 * Interesting!
 * Nesting loops should be possible with wp_reset_postdata() just after the inner
   loop. It’s strange because I thought I had addressed this in the loop shortcode,
   to make sure to return with the query reset (and restored to main query) in case
   of nested loops.
 * You’ve probably seen this already, but here it describes how nested loops should
   work: [http://codex.wordpress.org/Function_Reference/wp_reset_postdata](http://codex.wordpress.org/Function_Reference/wp_reset_postdata)
 * At the moment I don’t have time to look deeper, but this evening I’ll try to 
   get to the bottom of this.
 * —
 * Thanks for the example in ColdFusion – I’m not familiar with the framework, so
   it’s interesting to see the syntax. I’ve heard that Drupal and ModX have similar
   templating tags, and also in HTML templates in Javascript, like Moustache or 
   Underscore.
 *  Thread Starter [joshuairl](https://wordpress.org/support/users/joshuairl/)
 * (@joshuairl)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5023997)
 * It seems if I use the “get_posts()” with a foreach instead of the “have_posts()”
   loops I can get around it for now…
 * No rush
 *  Thread Starter [joshuairl](https://wordpress.org/support/users/joshuairl/)
 * (@joshuairl)
 * [11 years, 12 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5023999)
 * With the “naming” of the loop logic…
    If I use “$post” instead of “$homesection”
   it gets lost and sometimes returns a special-guest variable and sometimes the
   home_section variable… it’s almost like a race condition or something… Thinking
   it might just be safer and fool proof to use some sort of scope but who knows…
 *     ```
       global $homesection; // required
         $homesectionArgs = array( 'post_type' => 'home_section', 'numberposts' => 10, 'orderby' => 'menu_order', 'order' => 'ASC' ); // exclude category 9
         $homesections = get_posts($homesectionArgs);
         foreach($homesections as $homesection) : setup_postdata($homesection);
   
         endforeach;
       ```
   
 * _[Moderator Note: Please post code & markup between backticks or use the code
   button. Your posted code may now have been permanently damaged by the forum’s
   parser.]_
 *  Plugin Author [Eliot Akira](https://wordpress.org/support/users/miyarakira/)
 * (@miyarakira)
 * [11 years, 11 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5024056)
 * OK, I see the place where the query is being reset near the end of the [loop]
   shortcode. On line 759 of ccs-loop.php:
 *     ```
       wp_reset_query();
       wp_reset_postdata();
       ```
   
 * It’s possible that using both of these functions is interfering with your main
   loop. Could you try commenting out `wp_reset_query` and see if that straightens
   out the nested loops?
 * On my test site, I display an archive of posts (main loop in template) and several
   of the posts use the [loop] shortcode inside as secondary loops. They’re all 
   displaying fine, with or without `wp_reset_query`.
 * I’ve checked the Codex, and I see why I used both [wp_reset_query](http://codex.wordpress.org/Function_Reference/wp_reset_query)
   and [wp_reset_postdata](http://codex.wordpress.org/Function_Reference/wp_reset_postdata).
 * > **wp_reset_query()** restores the $wp_query and global post data to the original
   > main query.
 * > **wp_reset_postdata()** restores the global $post variable of the main query
   > loop after a secondary query loop using new WP_Query. It restores the $post
   > variable to the current post in the main query.
 * In both descriptions, there is an example of using WP_Query for a secondary loop,
   then restoring the main query using one or the other function.
 * —
 * I’ve looked into the core code to see exactly the difference between these two
   functions: `wp_reset_query` restores global $wp_query, then calls `wp_reset_postdata`,
   so definitely having both is redundant. I believe only the latter is necessary.
   I’ll set up more tests and update the plugin after I confirm this.
 *  Plugin Author [Eliot Akira](https://wordpress.org/support/users/miyarakira/)
 * (@miyarakira)
 * [11 years, 11 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5024181)
 * I’ve updated the plugin so it only uses `wp_reset_postdata()`.
 * Thank you for pointing this out. I believe the [loop] shortcode should reset 
   the query correctly when inside another loop. Please let me know if it solves
   your issue.

Viewing 9 replies - 1 through 9 (of 9 total)

The topic ‘[loop] within an existing post loop? possible?’ is closed to new replies.

 * ![](https://s.w.org/plugins/geopattern-icon/custom-content-shortcode_766976.svg)
 * [Custom Content Shortcode](https://wordpress.org/plugins/custom-content-shortcode/)
 * [Support Threads](https://wordpress.org/support/plugin/custom-content-shortcode/)
 * [Active Topics](https://wordpress.org/support/plugin/custom-content-shortcode/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/custom-content-shortcode/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/custom-content-shortcode/reviews/)

 * 9 replies
 * 2 participants
 * Last reply from: [Eliot Akira](https://wordpress.org/support/users/miyarakira/)
 * Last activity: [11 years, 11 months ago](https://wordpress.org/support/topic/loop-within-an-existing-post-loop-possible/#post-5024181)
 * Status: resolved