Skip to content

Instantly share code, notes, and snippets.

@tannerdolby
Last active April 16, 2025 19:58
Show Gist options
  • Save tannerdolby/0fd575a480d0299e1d6735f462799d77 to your computer and use it in GitHub Desktop.
Save tannerdolby/0fd575a480d0299e1d6735f462799d77 to your computer and use it in GitHub Desktop.
11ty filter for returning a sorted list of tags from collections. Use the it in a template like {{ collections.foo | taglist }} to get the sorted tag list.
eleventyConfig.addFilter("taglist", function(collection) {
const tags = [];
collection.forEach(post => {
tags.push(...post.data.tags);
});
const sorted = [...new Set(tags)].sort((a, b) => a.localeCompare(b));
return sorted;
});
@tannerdolby
Copy link
Author

@seezee Can you provide an example use case you're thinking of? If I understand correctly, you are looking to disallow certain tags when using the taglist filter.

Option 1:
If you know the tags you don't want the filter to output, you could provide a disallow list and then filter out disallowed tags before returning the sorted list.

eleventyConfig.addFilter("taglist", function(collection) {
    const disallowed = ["foo", "bar"];
    const tags = [];
    collection.forEach(post => {
        tags.push(...post.data.tags);
    });
    const sorted = [...new Set(tags)]
      .filter((tag) => !disallowed.includes(tag))
      .sort((a, b) => a.localeCompare(b));
    return sorted;
});

Option 2:
Filter the tags you don't want the filter to process ahead of time before utilizing the taglist filter.

@seezee
Copy link

seezee commented Apr 16, 2025

@seezee Can you provide an example use case you're thinking of? If I understand correctly, you are looking to disallow certain tags when using the taglist filter.

Option 1: If you know the tags you don't want the filter to output, you could provide a disallow list and then filter out disallowed tags before returning the sorted list.

eleventyConfig.addFilter("taglist", function(collection) {
    const disallowed = ["foo", "bar"];
    const tags = [];
    collection.forEach(post => {
        tags.push(...post.data.tags);
    });
    const sorted = [...new Set(tags)]
      .filter((tag) => !disallowed.includes(tag))
      .sort((a, b) => a.localeCompare(b));
    return sorted;
});

Option 2: Filter the tags you don't want the filter to process ahead of time before utilizing the taglist filter.

That worked a treat! Thank you!

@tannerdolby
Copy link
Author

Glad to hear it. You're welcome!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment