Craft CMS でエントリが特定のカテゴリに属しているかチェックする方法をご紹介します。
前提条件は下記のとおりです。
entry
変数にエントリの情報が入っているcategory
categories
この条件下で、例えばエントリが 「Craft
」というカテゴリに属しているかを調べる場合は下記のような Twig テンプレートを書きます。
{% set hasCategory = craft.categories.group('category').title('Craft').relatedTo({ sourceElement: entry, field: 'categories' }).exists() %} {% if hasCategory %} ... {% endif %}
これを下記のようにマクロにしておけば、
{% macro hasCategories(entry, categoryTitleArray) %} {{- craft.categories.group('category').title(categoryTitleArray).relatedTo({ sourceElement: entry, field: 'categories' }).exists() -}} {% endmacro %}
そのページでマクロを読み込んでおいて、
{% import '_macros/common.twig' as macro %}
下記のように使えて便利です。
{% if macro.hasCategory(entry, 'Craft') %} ... {% endif %}
複数のカテゴリのいずれかに属するかをまとめてチェックしたいときは、
{% if macro.hasCategory(entry, ['Craft', 'Twig']) %} ... {% endif %}
のようにして使えます。
以上です。