I have an entry page that lists out specific info for a product. I am using categories to sort the entries. I'm trying to figure out how to write a conditional that pulls in something specific if the entry belongs to a specific category.
-
So, you have a categories-field on the entry, and if a specific category is selected, you want to do something?– André ElvanCommented Nov 14, 2016 at 16:51
-
ya, in the entry you can select the category it's in and so I want to display something for entries that belong to a certain category.– Matthew CarletonCommented Nov 14, 2016 at 16:55
1 Answer
The category field returns an ElementCriteriaModel, which means you can use all the methods that you'd usually use to get a specific category on it.
For instance, if the category field is named entryCategories
, and you know the slug of the category you want to test for, you could do:
{% if entry.entryCategories.slug('my-category-slug').total() %}
Do something
{% endif %}
Or you could use the id
the same way.
Please note, this does not work if the entryCategory field was eager-loaded, since entry.entryCategories
would then return an array. In that case you could just loop over the array and have a check inside for loop that checks the category you're looping over is the correct one. A bit dirty, but it does the job.
-
1@MatthewCarleton I just updated the answer to exchange the
length
filter for the more efficienttotal()
method. Instead of querying the category models it just queries for the count of rows in the database. The query itself is quicker and it also uses much less memory.– carlcsCommented Nov 14, 2016 at 17:59