Skip to content

Instantly share code, notes, and snippets.

@timkelty
Last active June 17, 2025 11:09
Show Gist options
  • Save timkelty/6eea7085e60dbb3e15274ead70f9377a to your computer and use it in GitHub Desktop.
Save timkelty/6eea7085e60dbb3e15274ead70f9377a to your computer and use it in GitHub Desktop.
Craft CMS element cache tags

Craft CMS element cache tags

Given…

  • a section: handle: blog, id: 1
    • an entry type id: 1, with a Categories field
      • an entry, uri: blog/my-foo-entry, id: 2, related to blog/category/foo, published more than a day ago
  • a category group: handle: blog, id: 1
    • a category: uri: blog/category/foo, id: 23
    • a category: uri: blog/category/bar, id: 24
  • templates in this Gist

/blogindex.twig

Expected tags:

element
element::craft\elements\GlobalSet
element::craft\elements\GlobalSet::*
element::craft\elements\Entry
element::craft\elements\Entry::section:1
element::2
element::craft\elements\Category
element::craft\elements\Category::group:1
element::23
element::24

/blog/my-foo-entry_entry.twig

Expected tags:

element
element::craft\elements\Entry
element::2
element::craft\elements\GlobalSet
element::craft\elements\GlobalSet::*

/blog/category/foo_category.twig

Expected tags:

element::craft\elements\Category
element::23
element::craft\elements\GlobalSet
element::craft\elements\GlobalSet::*
element::craft\elements\Entry
element::craft\elements\Entry::*
element::2

/blog/category/foo?recent=1_category.twig

element::craft\elements\Category
element::23
element::craft\elements\GlobalSet
element::craft\elements\GlobalSet::*
element::craft\elements\Entry
element::craft\elements\Entry::*

Saving my-entry

Tags purged:

element::craft\elements\Entry::*
element::2
element::craft\elements\Entry::entryType:1
element::craft\elements\Entry::section:1
<h1>{{ category.title }}</h1>
{% set after = craft.app.request.getParam('recent') ? 'yesterday' : null %}
<h2>Entries</h2>
<ul>
{# This query is missing an explicit `.section()`, but will still get cleared because a `element::craft\elements\Entry::*` tag will be added. #}
{% for entry in craft.entries.blogCategory(category).after(after).all() %}
<li>{{ entry.link() }}</li>
{% endfor %}
</ul>
<h1>{{ entry.title }}</h1>
{{ entry.render() }}
<h1>Blog</h1>
<h2>Entries</h2>
<ul>
{% for entry in craft.entries.section('blog').all() %}
<li>{{ entry.link() }}</li>
{% endfor %}
</ul>
<h2>Categories</h2>
<ul>
{% for category in craft.categories.group('blog').all() %}
<li>{{ category.link() }}</li>
{% endfor %}
</ul>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment