combine

 avatar
tommydalton
twig
14 days ago
1.9 kB
3
Indexable
Never
{% set props = {
    query: craft.app.request.getParam('query') ?? '',
} %}

{# Default Craft search #}
{% set defaultSearchResults = craft.entries()
    .section('pages')
    .search(props.query)
    .type('not playground')
    .limit(null)
    .all() %}

{# Initialize a collection to hold all unique entries #}
{% set allEntries = [] %}
{% set allEntryIds = [] %}

{# Add default search results to the collection #}
{% for entry in defaultSearchResults %}
    {% if entry.id not in allEntryIds %}
        {% set allEntries = allEntries|merge([entry]) %}
        {% set allEntryIds = allEntryIds|merge([entry.id]) %}
    {% endif %}
{% endfor %}

{# Custom search for SEOmatic fields (assuming seoTitle and seoDescription are searchable text fields) #}
{# Adjust according to your actual field handles and ensure they are searchable #}
{% set seomaticEntries = craft.entries()
    .section('pages')
    .type('not playground')
    .limit(null)
    .all() %}

{% for entry in seomaticEntries %}
    {% set seo = seomatic.seoForElement(entry) %}
    {% if props.query in entry.slug or props.query in seo.metaGlobalVars.seoTitle or props.query in seo.metaGlobalVars.seoDescription %}
        {% if entry.id not in allEntryIds %}
            {% set allEntries = allEntries|merge([entry]) %}
            {% set allEntryIds = allEntryIds|merge([entry.id]) %}
        {% endif %}
    {% endif %}
{% endfor %}
Display the Results

twig
Copy code
{% for entry in allEntries %}
    <div class="col px-0 h-100 mb-6"> 
        <h5><a href="{{ entry.url }}">{{ entry.title }}</a></h5>
        {% set seo = seomatic.seoForElement(entry) %}
        {% if seo.metaGlobalVars.parsedValue('seoDescription')|length %}
            <div class="redactor">{{ seo.metaGlobalVars.parsedValue('seoDescription') }}</div>
        {% endif %}
    </div>
{% endfor %}
Leave a Comment