Dynamische gratis verzending balk voor Shopify
Diek Thunnissen · 25 mrt 2025 · 6 min leestijd
De Gratis Verzending balk geeft je klanten real-time informatie over hoeveel ze nog moeten besteden om in aanmerking te komen voor gratis verzending. Deze handleiding legt stap voor stap uit hoe je dit onderdeel kunt integreren in je Shopify theme.
De DT Gratis Verzending balk geeft je klanten real-time informatie over hoeveel ze nog moeten besteden om in aanmerking te komen voor gratis verzending. Deze handleiding legt stap voor stap uit hoe je dit onderdeel kunt integreren in je Shopify theme.
Show Image
Wat doet deze feature?
- Toont hoeveel klanten nog moeten uitgeven om gratis verzending te krijgen
- Past zich automatisch aan wanneer klanten producten aan hun winkelwagen toevoegen of verwijderen
- Verandert naar een felicitatiebericht wanneer klanten de drempelwaarde bereiken
- Werkt in real-time zonder paginaverversing
Stap 1: Maak een nieuwe section file in je Dawn thema
- Log in op je Shopify admin dashboard
- Ga naar Online Store > Themes
- Klik op de knop Actions bij je live thema en selecteer Edit code
- In de linker zijbalk, onder de map Sections, klik op Add a new section
- Noem het bestand
dt-gratis-verzending.liquid - Kopieer en plak de volgende code in het bestand:
{% schema %}
{
"name": "DT Gratis Verzending",
"settings": [
{
"type": "color",
"id": "background_color",
"label": "Background Color",
"default": "#212121"
},
{
"type": "color",
"id": "text_color",
"label": "Text Color",
"default": "#ffffff"
},
{
"type": "number",
"id": "free_shipping_threshold",
"label": "Free Shipping Threshold (in EUR)",
"default": 150
},
{
"type": "text",
"id": "progress_message",
"label": "Progress Message",
"default": "Je bent nog €[amount] verwijderd van gratis verzending*"
},
{
"type": "text",
"id": "success_message",
"label": "Success Message",
"default": "Gefeliciteerd! Je bestelling komt in aanmerking voor gratis verzending"
},
{
"type": "text",
"id": "static_message",
"label": "Static Message (optional)",
"default": "Gratis verzending voor alle bestellingen vanaf €150 in Nederland!*"
},
{
"type": "checkbox",
"id": "use_static_message",
"label": "Use Static Message (instead of dynamic)",
"default": false
}
],
"presets": [
{
"name": "DT Gratis Verzending",
"category": "Promotional"
}
]
}
{% endschema %}
<style>
.dynamic-shipping-bar {
background-color: {{ section.settings.background_color }};
color: {{ section.settings.text_color }};
text-align: center;
padding: 10px 20px;
font-size: 14px;
width: 100%;
}
.shipping-success-message,
.shipping-progress-message,
.shipping-static-message {
transition: opacity 0.3s ease;
}
.hidden {
display: none;
}
</style>
<div class="dynamic-shipping-bar" id="dynamic-shipping-bar">
{% if section.settings.use_static_message %}
<div class="shipping-static-message">
{{ section.settings.static_message }}
</div>
{% else %}
<div class="shipping-success-message hidden">
{{ section.settings.success_message }}
</div>
<div class="shipping-progress-message">
{{ section.settings.progress_message }}
</div>
{% endif %}
</div>
<script>
(function() {
// Configuratie-instellingen van de sectie ophalen
const config = {
threshold: {{ section.settings.free_shipping_threshold | json }},
useStaticMessage: {{ section.settings.use_static_message | json }},
progressMessage: {{ section.settings.progress_message | json }}
};
// Alleen actief als we niet in statische modus zitten
if (!config.useStaticMessage) {
// Initiële update bij pagina laden
document.addEventListener('DOMContentLoaded', function() {
updateShippingBar();
});
// Cart events voor verschillende Shopify thema's
document.addEventListener('cart:refresh', updateShippingBar);
document.addEventListener('cart:updated', updateShippingBar);
// Directe Ajax cart implementaties
if (typeof window.Shopify !== 'undefined' && window.Shopify.onCartUpdate) {
const originalOnCartUpdate = window.Shopify.onCartUpdate;
window.Shopify.onCartUpdate = function(cart) {
if (typeof originalOnCartUpdate === 'function') {
originalOnCartUpdate(cart);
}
updateShippingBarWithCart(cart);
};
}
// Monitor cart form submissions en quantity wijzigingen
monitorCartChanges();
}
function monitorCartChanges() {
// Wacht even tot de pagina volledig is geladen
setTimeout(function() {
// Cart forms (toevoegen aan winkelwagen)
document.querySelectorAll('form[action="/cart/add"]').forEach(form => {
form.addEventListener('submit', function() {
setTimeout(updateShippingBar, 500);
});
});
// Quantity inputs
document.querySelectorAll('input[name="updates[]"], [data-quantity-input]').forEach(input => {
input.addEventListener('change', function() {
setTimeout(updateShippingBar, 500);
});
});
// Verwijder knoppen
document.querySelectorAll('[data-cart-remove], .cart__remove, .cart-item__remove, [href*="/cart/change?"]').forEach(button => {
button.addEventListener('click', function() {
setTimeout(updateShippingBar, 500);
});
});
}, 1000);
}
function updateShippingBar() {
// Get current cart data through Shopify's cart API
fetch('/cart.js')
.then(response => response.json())
.then(cart => {
updateShippingBarWithCart(cart);
})
.catch(error => console.error('Error fetching cart:', error));
}
function updateShippingBarWithCart(cart) {
const cartTotal = cart.total_price / 100; // Convert from cents to euros
// Get elements
const progressMessage = document.querySelector('.shipping-progress-message');
const successMessage = document.querySelector('.shipping-success-message');
// Calculate remaining amount to qualify for free shipping
const remaining = Math.max(0, config.threshold - cartTotal);
// Update message
if (remaining > 0) {
// Nog niet aan gratis verzending
// Formatteer het bedrag
const formattedRemaining = remaining.toFixed(2).replace('.', ',');
// Vervang placeholder in originele template
if (progressMessage) {
progressMessage.textContent = config.progressMessage.replace('[amount]', formattedRemaining);
}
// Toon progress message, verberg success message
if (progressMessage) progressMessage.classList.remove('hidden');
if (successMessage) successMessage.classList.add('hidden');
} else {
// Komt in aanmerking voor gratis verzending!
if (progressMessage) progressMessage.classList.add('hidden');
if (successMessage) successMessage.classList.remove('hidden');
}
}
// Periodieke refresh (voor het geval andere methoden niet werken)
setInterval(updateShippingBar, 5000);
// Start de initiële update
updateShippingBar();
})();
</script>- Klik op Save om het bestand op te slaan
Stap 2: Voeg de sectie toe aan je thema
Er zijn twee manieren om de DT Gratis Verzending balk aan je thema toe te voegen:
Via Theme Editor (aanbevolen voor Dawn)
- Ga terug naar Online Store > Themes
- Klik op de knop Customize bij je live thema
- Zorg ervoor dat je op de Home page bent (of een andere pagina waar je de balk wilt tonen)
- Klik in de linker zijbalk op Add section
- Scroll naar beneden en zoek naar DT Gratis Verzending
- Klik erop om het toe te voegen
- Versleep de sectie naar de gewenste positie (meestal direct onder de header)
- Configureer de instellingen naar wens (kleuren, drempelwaarde, berichten)
- Klik op Save om de wijzigingen op te slaan
Stap 3: Configureer de gratis verzending balk
Wanneer je de sectie hebt toegevoegd, kun je de volgende instellingen configureren:
- Achtergrondkleur - De kleur van de balk (standaard: donkergrijs)
- Tekstkleur - De kleur van de tekst (standaard: wit)
- Gratis verzending drempel - Het bedrag waarbij gratis verzending wordt aangeboden (standaard: €150)
- Voortgangsbericht - Het bericht dat wordt getoond wanneer klanten nog meer moeten uitgeven
- Gebruik
[amount]als placeholder voor het resterende bedrag - Voorbeeld: "Je bent nog €[amount] verwijderd van gratis verzending*"
- Gebruik
- Succesbericht - Het bericht dat wordt getoond wanneer klanten de drempelwaarde hebben bereikt
- Voorbeeld: "Gefeliciteerd! Je bestelling komt in aanmerking voor gratis verzending"
- Statisch bericht - Optioneel bericht dat altijd wordt getoond, ongeacht het winkelwagenbedrag
- Gebruik statisch bericht - Schakelaar om tussen dynamisch en statisch bericht te kiezen
Stap 4: Test de functionaliteit
- Open je webwinkel in een nieuw tabblad
- Controleer of de verzendingsbalk correct wordt weergegeven
- Voeg een product toe aan je winkelwagen
- Controleer of het bedrag in de balk correct wordt bijgewerkt
- Voeg producten toe tot je boven de drempelwaarde komt
- Controleer of het succesbericht verschijnt
- Verwijder producten uit je winkelwagen
- Controleer of het bericht terugkeert naar de voortgangsstatus
Probleemoplossing
Het bedrag wordt niet bijgewerkt
- Oplossing 1: Controleer of je de juiste placeholder
[amount]gebruikt in het voortgangsbericht - Oplossing 2: Ververs de pagina en leeg je browsercache
- Oplossing 3: Controleer de browser console op JavaScript-fouten
De balk verschijnt niet
- Oplossing 1: Controleer of je de sectie correct hebt toegevoegd aan je thema
- Oplossing 2: Zorg ervoor dat de sectie niet per ongeluk is verborgen in de theme editor
- Oplossing 3: Controleer of het bestand correct is opgeslagen in de sectie map
De balk werkt niet correct met het Ajax Cart systeem
- Oplossing 1: Zorg ervoor dat het Dawn thema up-to-date is
- Oplossing 2: Sommige aangepaste Ajax cart systemen vereisen specifieke aanpassingen - neem contact op met de ontwikkelaar van het thema als je problemen blijft ondervinden
Aanpassingsmogelijkheden
Deze gratis verzendingsbalk kan verder worden aangepast door ontwikkelaars:
- Voeg een voortgangsbalk toe om visueel te tonen hoe dichtbij de klant bij de drempelwaarde is
- Pas het design aan om het meer in lijn te brengen met je merkstijl
- Voeg extra animaties of effecten toe wanneer de drempelwaarde wordt bereikt
Compatibiliteit
Deze code is getest en werkt met:
- Shopify Dawn thema (standaard)
- De meeste moderne Shopify thema's
- Mobiele en desktop browsers
Diek ThunnissenFounder & lead developer. Bouwt, verbetert en migreert de Shopify-laag voor DTC- en B2B-merken.Plan een gesprek →