Craft CMS でエントリが特定のカテゴリに属しているかチェックする

Craft CMS でエントリが特定のカテゴリに属しているかチェックする方法をご紹介します。

Craft CMS Logo

前提条件は下記のとおりです。

  • 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 %}

のようにして使えます。

以上です。

Published 2019-09-10
Updated 2019-09-10