This custom code is completely free to use, but please note it does not include 1-on-1 technical support. If you need a bespoke, done-for-you solution to customize your Shopify store, my team is here to help! Head to my channel homepage and use the link in the trailer to reach out.
{% assign target_metafield = "custom.accordion_content" %}
{%- liquid
assign namespace = target_metafield | split: '.' | first
assign key = target_metafield | split: '.' | last
assign accordion_html = product.metafields[namespace][key] | metafield_tag | remove: '<div class="metafield-rich_text_field">' | remove: '</div>'
-%}
{% if accordion_html != blank %}
<div class="onhow-studio-accordion-wrapper">
{% assign chunks = accordion_html | split: '<h3>' %}
{% for chunk in chunks %}
{% assign stripped_chunk = chunk | strip %}
{% if stripped_chunk != blank %}
{% if chunk contains '</h3>' %}
{% assign parts = chunk | split: '</h3>' %}
{% assign title = parts[0] | strip_html | strip %}
{% assign body = parts[1] | strip %}
{% if title != blank %}
<details class="onhow-studio-accordion-item">
<summary class="onhow-studio-accordion-summary">
<span class="onhow-studio-accordion-title">{{ title }}</span>
<span class="onhow-studio-accordion-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<polyline points="6 9 12 15 18 9"></polyline>
</svg>
</span>
</summary>
<div class="onhow-studio-accordion-body">
{{ body }}
</div>
</details>
{% endif %}
{% else %}
<div class="onhow-studio-accordion-intro">
{{ chunk }}
</div>
{% endif %}
{% endif %}
{% endfor %}
</div>
<style>
.onhow-studio-accordion-wrapper {
display: flex;
flex-direction: column;
width: 100%;
margin: 1.5rem 0;
color: inherit;
}
.onhow-studio-accordion-intro {
margin-bottom: 1rem;
font-size: 0.95em;
opacity: 0.9;
}
.onhow-studio-accordion-item {
border-bottom: 1px solid rgba(128, 128, 128, 0.2);
}
.onhow-studio-accordion-item:first-of-type {
border-top: 1px solid rgba(128, 128, 128, 0.2);
}
.onhow-studio-accordion-summary {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1.25rem 0;
cursor: pointer;
list-style: none;
font-weight: 500;
color: inherit;
}
.onhow-studio-accordion-summary::-webkit-details-marker {
display: none;
}
.onhow-studio-accordion-title {
flex: 1;
padding-right: 1rem;
font-size: 17px;
line-height: 1;
}
.onhow-studio-accordion-icon {
display: flex;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
transition: transform 0.7s ease;
flex-shrink: 0;
}
.onhow-studio-accordion-icon svg {
width: 100%;
height: 100%;
}
.onhow-studio-accordion-item[open] .onhow-studio-accordion-icon {
transform: rotate(180deg);
}
.onhow-studio-accordion-body {
padding-bottom: 1.25rem;
color: inherit;
opacity: 0.85;
font-size: 0.95em;
line-height: 1.6;
}
.onhow-studio-accordion-body p:first-child {
margin-top: 0;
}
.onhow-studio-accordion-body p:last-child {
margin-bottom: 0;
}
.onhow-studio-accordion-item[open] .onhow-studio-accordion-body {
animation: onhowFadeIn 0.6s ease-in-out;
}
@keyframes onhowFadeIn {
0% { opacity: 0; transform: translateY(-5px); }
100% { opacity: 0.85; transform: translateY(0); }
}
</style>
{% endif %}
