3

I need to loop through the 6 latest entries from 3 different structures. The problem is, the entries are located on different levels. One of the structures has entries on level 3, and the other two has entries on level 1.

1 Answer 1

5

If you explicitly need only the entries at level 3, and those at level 1, I think combining two queries works best:

{# Get ids for all entries from the different structures and levels #}
{% set entriesAtLevelThree = craft.entries.section('level-3-section').level(3).limit(6).ids() %}
{% set entriesAtLevelOne = craft.entries.section(['level-1-section-1', 'level-1-section-2']).level(1).limit(6).ids() %}

{# Combine those IDs #}
{% set entryIdsCombined = entriesAtLevelThree | merge(entriesAtLevelOne) %}

{# Get all entries (so, no IDs this time), using your IDs #}
{% set allEntries = craft.entries.id(entryIdsCombined).limit(6).order('postDate DESC') %}

{% for entry in allEntries %}
    {# do your thing #}
{% endfor %}

You can, of course, cache this by wrapping it in {% cache %} tags.

2
  • 1
    You should add .limit(6) to the first queries as well, otherwise the entryIdsCombined array could be very large.
    – gromgull
    Commented Mar 6, 2015 at 9:53
  • 1
    Good point. Will do.
    – Paul
    Commented Mar 6, 2015 at 9:54

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.