Skip to main content
Füge eine Checkbox unter dem Checkout-Button hinzu und hindere Käufer daran fortzufahren, bis sie sie ankreuzen. Nützlich für AGB-Zustimmungen, Altersabfragen und Bestätigungen bei Sonderanfertigungen.
Das checkout-Event kann den Checkout nicht abbrechen. Es feuert als Benachrichtigung kurz bevor der Browser navigiert, daher bewirkt false zurückzugeben oder preventDefault aufzurufen nichts. Die einzige Möglichkeit, den Checkout zu sperren, besteht darin, den Button bevor er gedrückt wird nicht mehr auf Klicks reagieren zu lassen — genau das zeigt diese Seite.Betrachte das als UI-Hürde, nicht als rechtliche Garantie. Ein entschlossener Käufer kann den Checkout weiterhin direkt erreichen.

So funktioniert es

Drei Bausteine:
  1. Ein Custom-Code-Block unter dem Checkout-Button rendert die Checkbox.
  2. Solange die Box nicht angekreuzt ist, fügt der Block über die Shadow Root den Checkout- und Express-Payment-Buttons des Warenkorbs eine Klasse hinzu.
  3. Custom CSS sorgt dafür, dass diese Klasse Klicks deaktiviert.

Schritt 1: Füge den Checkbox-Block hinzu

Füge einen Custom-Code-Block unter deinem Checkout-Button-Block hinzu, schalte ihn in den Modus React component und füge Folgendes ein:
Klicke auf Compile und aktiviere dann „Use custom template“. Vorher rendert der Block nichts. Die Abhängigkeit props.cart ist wichtig: Sie wendet die Klasse nach jedem Re-Render des Warenkorbs erneut an, der sie sonst entfernen würde.

Schritt 2: Füge das CSS hinzu

Unter Cart settings → Custom CSS:
pointer-events: none blockiert den Klick tatsächlich; die Deckkraft zeigt Käufern lediglich, warum.

Schritt 3: Teste es

Bestätige in der Vorschau, dass:
  • Der Checkout-Button beim Laden abgedunkelt ist und nicht auf Klicks reagiert.
  • Das Ankreuzen der Box ihn aktiviert; das Entfernen des Häkchens deaktiviert den Button wieder.
  • Auch Express-Payment-Buttons gesperrt sind.
  • Das Hinzufügen oder Entfernen eines Artikels den Button nicht wieder aktiviert, solange die Box nicht angekreuzt ist.
Der letzte Punkt ist der häufigste Fehler. Wenn sich der Button nach einer Warenkorbänderung selbst wieder aktiviert, läuft der Effekt nicht erneut. Prüfe, ob props.cart im Dependency-Array steht.

Nachverfolgen, wer zugestimmt hat

Die Checkbox ist reiner Browser-Zustand; sie erreicht die Bestellung nie. Um die Zustimmung festzuhalten, stemple sie beim Add-to-Cart als Property auf jede Zeile:
Füge das in deinem Theme dem Produktformular hinzu. Shopify liest properties[...] direkt aus dem Formular, sodass der Wert die Bestellung erreicht, egal wer das Hinzufügen ausführt: Aftersell, das Theme oder eine andere App. Eine mit _ beginnende Property bleibt aus der käufersichtbaren Zeile heraus, erreicht Shopify aber trotzdem und erscheint somit auf der Bestellung. Damit wird festgehalten, welche AGB-Version aktiv war, nicht dass der Käufer die Box angekreuzt hat.

Worauf du achten solltest

  • Ziele nur auf cart-external-*-Klassen. Die cart-internal-*-Gegenstücke sind die interne Mechanik des Warenkorbs, kein Ansatzpunkt für deinen Code. Siehe Custom CSS.
  • Prüfe, ob shadowRoot existiert, bevor du sie verwendest. Sie ist undefined, bis der Warenkorb gestartet ist.
  • Der Block rendert nichts, bis der Warenkorb geladen ist, sodass der Checkout-Button nie kurzzeitig aktiv ist, bevor die Sperre greift.
  • Ein React-Block, der einen Fehler wirft, rendert nichts, und der Rest des Warenkorbs läuft weiter — was hier einen ungesicherten Checkout-Button bedeutet. Teste in der Vorschau, bevor du veröffentlichst.

Nächste Schritte