I need to be able to display entries (within one section) that share keywords. I don't care what the keywords are, just want to display the entries based on 2 or more shared keywords.
Anyone know how to go about this?
Craft CMS Stack Exchange is a question and answer site for administrators, end users, developers and designers for Craft CMS. It only takes a minute to sign up.
Sign up to join this communityI need to be able to display entries (within one section) that share keywords. I don't care what the keywords are, just want to display the entries based on 2 or more shared keywords.
Anyone know how to go about this?
After chatting on Discord a bit more, here's a solution in case it helps somebody:
{# Base query #}
{% set baseQuery = craft
.entries
.section('stories')
.orderBy('RAND()')
.with(['storyKeywords']) %}
{# Fetch one story at random #}
{% set baseStory = baseQuery.one() %}
Base random story: {{ baseStory.title }}<br>
{# Fetch a second story related to `baseStory` at random #}
{% set relatedStory = clone(baseQuery)
.relatedTo({
targetElement: baseStory.storyKeywords,
field: 'storyKeywords'
})
.id('not ' ~ baseStory.id)
.one() %}
Related Story: {{ relatedStory.title }}<br>
{% set baseKeywords = baseStory.storyKeywords %}
{% set relatedKeywords = relatedStory.storyKeywords %}
<hr>
All tags in common: {{ baseKeywords | filter((tag) => tag.title in relatedKeywords) | join(', ') }} <br>
Number of tags in common: {{ baseKeywords | filter((tag) => tag.title in relatedKeywords) | length }}
You could do the following:
{# Fetch tags from your current entry's tag field #}
{% set tags = entry.tagFieldHandle.ids() %}
{# Query entries related to your tags #}
{% set entries = craft.entries.relatedTo(tags).all() %}