Skip to main content

How to create loops within loops within loops

The request

Is it possible to nest a Loop tag inside another Loop tag?

The solution

<Loop type=taxonomy_term taxonomy=category>
<Field title />
<Loop type=post taxonomy=category terms="{Field name}">
<Field title />
</Loop>
</Loop>

The explanation

Not only is it possible, but nesting loops is one of the most powerful ways to use Loops & Logic to display exactly the content you need. Every time a Loop is created, it draws on the context of the loop that surrounds it. Every page or post on a WordPress site has a loop associated with it, often called the default loop. This is why you can add L&L's dynamic tags directly to the root of a template and it will know to get field data from the current post. It's as if the whole template is surrounded by a loop like <Loop type=post id=current>.

But we can change that loop context by adding loops to our template or nesting loops. In the example above, the inner <Field title /> tag gets its context from the post loop because it's placed inside that post loop. The post loop tag itself (<Loop type=post ...) gets its context from the outer taxonomy term loop. This is why it's able to get taxonomy term names dynamically. We're using the taxonomy_term loop to pass the value {Field name} to the terms parameter.