Cancellation Button in Shopware 6: How to Do It Without an Update

back

shopware_vertrag_widerrufen.png

Starting June 19, 2026, the electronic cancellation button (Widerrufsbutton) is legally mandatory for B2C online shops in Germany (§ 356a BGB). Customers must be able to cancel contracts directly in the shop using a clearly labeled button — and the shop must automatically confirm receipt by email.

Shopware has built the solution natively starting with version 6.7.9.0 (backported to 6.6 starting with 6.6.10.14). If you're running one of these versions or newer, simply enable the button under Settings > Basic Information. If you're still on an older version, you'll need to set it up yourself — this article shows how.

Screenshot 2026-06-12 at 14-39-09 — Alle iCloud.png


Prerequisites

  • Shopware 6 from version 6.5.0.0, older than 6.6.10.14

  • Access to the Shopware admin backend

  • FTP or SSH access to the server (for the final step)

Step 1: Install the form plugin

First, you need the free form plugin from Telekom. It allows contact forms to be embedded directly in Shopping Experiences.

Download the plugin from the Shopware Store:
store.shopware.com →
Form for Inquiries for Shopping Experiences

After installation, activate the plugin under Settings > Extensions > My Extensions.

telekom_formular.png

Step 2: Create a Shopping Experience

In the admin backend under Content > Shopping Experiences, create a new Shopping Experience:

  • Type: Shop page

  • Name: e.g. „Cancellation Form“

In the layout editor, on the left in the Form block category, drag the Form Component block onto the page.

block_formular.png

Step 3: Configure the form

Click the gear icon on the form block to open the settings. Three tabs need to be configured:

„Form Structure“ tab

  • First name: required field

  • Last name: required field

  • Email address: required field

  • Comment field: not required

  • Privacy policy: required field

  • Required field information: enabled

  • Set origin manually: enabled

  • Origin: Cancel contract

  • Origin value: Cancellation form

  • Disable all other options

„Custom Inputs for the Form“ tab

  • Custom input 1: required field

  • Label: Order number

  • Type: Input field

„Sending Data via Email“ tab

  • Enable sending to one or more recipients – enter the shop operator's name and email address

  • Enable sending to the requester

vertrag_widerrufen_formular.png

Step 4: Create category and page

Under Catalogues > Categories, create a new category:

  • Name: Cancel contract

  • Active: Yes

  • Hide in navigation: Yes (if no menu entry is desired)

  • Under Layout, link the Shopping Experience layout you created

  • Add SEO data (URL slug, meta title, meta description)

kategorie.png

Then copy the category ID from the browser URL:

https://www.mein-shop.de/admin#/sw/category/index/019ebaf1b9e67c229e2d0eb9b26d8783/seo

The ID in this example is: 019ebaf1b9e67c229e2d0eb9b26d8783 – you'll need it in the final step.

Step 5: Adjust the email template

In the admin under Settings > Email Templates, search for „Inquiry form“ and open the template. In the HTML tab, replace the existing content with the following code:

<div style="font-size:12px;">
    Guten Tag {{ periodRequestFormData.firstname }} {{ periodRequestFormData.lastname }},
    <br/><br/>
    wir haben Ihren Widerrufsantrag für den Vertrag mit der Nummer {{ periodRequestFormData.freeInput }} erhalten und bestätigen den Eingang hiermit.
    <br/><br/>
    Ihre übermittelten Angaben:<br/>
    Vorname: {{ periodRequestFormData.firstname }}<br/>
    Nachname: {{ periodRequestFormData.lastname }}<br/>
    E-Mail-Adresse: {{ periodRequestFormData.email }}<br/>
    Vertragsnummer: {{ periodRequestFormData.freeInput }}<br/>
    {% if periodRequestFormData.comment != "" %}Kommentar: {{ periodRequestFormData.comment }}<br/>{% endif %}
    <br/>
    Das Formular wurde am {{ "now"|date('d.m.Y') }} um {{ "now"|date('H:i') }} Uhr eingereicht.
    <br/><br/>
    Mit freundlichen Grüßen<br/>
    {{ salesChannel.name }}
</div>

mail_html.png

Step 6: Create a snippet

Under Settings > Snippets, select the desired set and create a new snippet:

  • Key: revocationRequestSnippetKey

  • Value: Cancel contract

textbausteine

Step 7: Free plugin

If you'd rather set up the button without building your own plugin, you can use the free eazyCode Cancellation Button Plugin. It automatically adds the button to the footer – the category can be set directly in the plugin settings, with no coding knowledge required: Download the free plugin.

If you'd rather build the button manually with your own plugin, follow the steps below.

Alternative Step 7: Adding the button to the footer

For this final step, you need a minimal Shopware plugin that extends the footer template block. Via FTP or SSH, create the following structure in the Shopware directory:

custom/plugins/SwWiderrufsButton/
├── composer.json
└── src/
    ├── SwWiderrufsButton.php
    └── Resources/
        └── views/
            └── storefront/
                └── layout/
                    └── footer/
                        └── footer.html.twig

composer.json

{
    "name": "sw/widerrufs-button",
    "description": "Widerrufsbutton Footer",
    "version": "1.0.0",
    "type": "shopware-platform-plugin",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "Sw\\WiderrufsButton\\": "src/"
        }
    },
    "extra": {
        "shopware-plugin-class": "Sw\\WiderrufsButton\\SwWiderrufsButton",
        "label": {
            "de-DE": "Widerrufsbutton",
            "en-GB": "Revocation Button"
        }
    }
}

src/SwWiderrufsButton.php

<?php declare(strict_types=1);

namespace Sw\WiderrufsButton;

use Shopware\Core\Framework\Plugin;

class SwWiderrufsButton extends Plugin {}

src/Resources/views/storefront/layout/footer/footer.html.twig

Replace YOUR-CATEGORY-ID with the category ID from Step 4:

{% sw_extends '@Storefront/storefront/layout/footer/footer.html.twig' %}

{% block layout_footer_navigation_hotline_content %}
    {{ parent() }}
    <a href="{{ seoUrl('frontend.navigation.page', { navigationId: 'YOUR-CATEGORY-ID' }) }}"
       class="btn btn-primary mt-2">
        {{ 'revocationRequestSnippetKey'|trans }}
    </a>
{% endblock %}

Then activate the plugin via the console and clear the cache:

bin/console plugin:refresh
bin/console plugin:install --activate SwWiderrufsButton
bin/console theme:compile
bin/console cache:clear

button


Conclusion

With these seven steps, the legally required cancellation button is fully set up even without a Shopware update: the form collects the data, the customer receives a legally compliant confirmation email, and the button is visibly anchored in the footer. If you're planning long-term, you should still schedule an update to Shopware 6.6.10.14 or 6.7.9.0 — there, this manual effort disappears completely.

eazyCode Logo Do you have questions about implementing the cancellation button in your Shopware shop? We're happy to help – no obligation, and fast. Contact us, we respond within 24 hours.

Kostenloses Erstgespräch – unverbindlich

Ihr Projekt verdient einen ehrlichen Partner.

Schildern Sie uns Ihre Anforderungen – wir melden uns innerhalb von 24 Stunden mit einer ersten Einschätzung. Kein Verkaufsgespräch, kein Kleingedrucktes.

Telefon

Mo–Fr, 9–17 Uhr. Wir sind direkt erreichbar.

+49 (0) 9072 922022 - 0
Termin vereinbaren

30 Minuten. Online. Kostenlos und unverbindlich.

Termin vereinbaren

Schreiben Sie uns – wir antworten innerhalb von 24 Stunden.