
So entfernen Sie den In den Warenkorb-Button in WooCommerce
Der „In den Warenkorb"-Button ist der grundlegende Mechanismus in WooCommerce, der Ihren Shop am Laufen hält. Aber grundlegend bedeutet nicht immer passend. Eine reine Präsentationsseite ohne Bestellfunktion, ein Auftragsprodukt mit individueller Preisgestaltung, ein ausverkaufter Artikel, der noch nicht deaktiviert werden soll: In all diesen Fällen stört der standardmäßige „In den Warenkorb"-Button nur.
Sie könnten den radikalen Weg gehen und den Produktstatus auf „Versteckt" setzen, aber dann verschwindet das Produkt aus dem Katalog und wird nicht mehr indexiert. Eine deutlich sauberere Lösung ist es, die Produktkarte sichtbar zu lassen und den Kauf-Button zu entfernen oder zu ersetzen. WooCommerce stellt dafür mehrere Hooks und Filter bereit, von der globalen Deaktivierung bis zum gezielten Ausblenden bei einem einzelnen Produkt.
Nachfolgend finden Sie alle funktionierenden Methoden, von einfach bis anspruchsvoll. Jede wurde mit der aktuellen WooCommerce-Version getestet.
💡 Kurzübersicht:
- Gesamte Seite auf einmal: zwei
remove_action-Aufrufe infunctions.php, einer für das Produktraster und einer für die Produktseite - Startseite und Archive: bedingter
woocommerce_is_purchasable-Filter mitis_shop() - Alle Kategorien oder eine bestimmte Kategorie: derselbe Filter mit
is_product_category()oderis_product_category('slug') - Einzelnes Produkt: drei Methoden, integrierter Admin-Schalter, Bestand auf null setzen, Filter nach
product_id - Für diejenigen, die einen Button benötigen: Ersetzen durch eigenen Text oder einen „Angebot anfordern"-Button
1. Button auf der gesamten Seite entfernen
Wenn Ihr Shop als reine Präsentationsfläche ohne Kaufabsicht dient, ist der einfachste Ansatz, den Button global mit zwei Hooks in der functions.php Ihres aktiven Themes zu entfernen.
Der erste Hook behandelt die Produktkarten im Raster (der [products]-Shortcode, Shop-Seite, Kategorien), der zweite die einzelnen Produktseiten:
1 // Remove button from card grid 2 remove_action( 3 'woocommerce_after_shop_loop_item', 4 'woocommerce_template_loop_add_to_cart' 5 ); 6 7 // Remove button from product page 8 remove_action( 9 'woocommerce_single_product_summary', 10 'woocommerce_template_single_add_to_cart', 11 30 12 );
Es ist besser, diesen Code nicht direkt in der functions.php Ihres Themes zu platzieren (was das Risiko birgt, Änderungen bei einem Update zu verlieren), sondern über das Code Snippets-Plugin oder ein Child-Theme. Erstellen Sie vor jeder Bearbeitung ein Backup; ohne eines haben Sie keine Möglichkeit für einen Rollback.
2. Button auf der Startseite und Archivseiten ausblenden
Die globale Deaktivierung ist nicht für jeden geeignet. Ein häufiges Szenario: Der Button soll auf der Produktseite erhalten bleiben, aber aus dem Katalog und der Startseite verschwinden (wo Produkte als Liste angezeigt werden).
Hier ist es besser, anstelle von remove_action den Filter woocommerce_is_purchasable mit einer is_shop()-Bedingung zu verwenden:
1 function ts_hide_cart_on_shop() { 2 if ( is_shop() || is_front_page() ) { 3 add_filter( 'woocommerce_is_purchasable', '__return_false' ); 4 } 5 } 6 add_action( 'wp', 'ts_hide_cart_on_shop' );
Der wp-Hook wird früh ausgelöst, vor dem Rendering, und vermeidet wiederholte Prüfungen, die die Seite verlangsamen würden. is_shop() deckt die Haupt-Shopseite ab, und is_front_page() eine statische Startseite, wenn diese einen WooCommerce-Shortcode anzeigt. Der Filter gilt nicht für Produktseiten, sodass der Kauf dort normal funktioniert.
3. Button von allen Kategorieseiten entfernen
Gleiches Prinzip, aber ersetzen Sie is_shop() durch is_product_category() ohne Parameter. Der Filter greift bei jeder Produktkategorie:
1 function ts_hide_cart_in_categories() { 2 if ( is_product_category() ) { 3 add_filter( 'woocommerce_is_purchasable', '__return_false' ); 4 } 5 } 6 add_action( 'wp', 'ts_hide_cart_in_categories' );
Der Button bleibt auf den einzelnen Produktseiten erhalten. Das ist nützlich, wenn der Katalog als Schaufenster dient und der Kauf erst nach dem Navigieren zur Produktkarte möglich sein soll, beispielsweise damit Nutzer zuerst die Beschreibung und Spezifikationen lesen.
4. Button für eine einzelne Kategorie deaktivieren
Manchmal ist eine Kategorie in Ihrem Shop für Auftragsarbeiten vorgesehen, während der Rest Standardprodukte enthält. In diesem Fall benötigen Sie eine gezielte Sperrung nach Kategorie-Slug:
1 function ts_hide_cart_for_category() { 2 if ( is_product_category( 'pod-zakaz' ) ) { 3 add_filter( 'woocommerce_is_purchasable', '__return_false' ); 4 } 5 } 6 add_action( 'wp', 'ts_hide_cart_for_category' );
Ersetzen Sie 'pod-zakaz' durch den tatsächlichen Slug Ihrer Zielkategorie. Den Slug finden Sie im Admin-Bereich unter „Produkte → Kategorien" in der Spalte „Slug". Der Filter deaktiviert den Kauf für alle Produkte in der Kategorie stillschweigend; der Button verschwindet auch auf der Produktseite, da WooCommerce dort ebenfalls is_purchasable() prüft.
5. Button für ein bestimmtes Produkt ausblenden
Das häufigste Szenario: Ein Produkt von Hunderten soll vorübergehend ohne Bestellmöglichkeit angezeigt werden. WooCommerce bietet drei Wege, dies zu tun.
Methode 1: Integrierter Admin-Schalter
Gehen Sie zur Produktbearbeitung, öffnen Sie den Tab „Bestand" und stellen Sie den „Lagerstatus" auf „Nicht auf Lager". Setzen Sie das Kontrollkästchen „Nachbestellungen erlauben" auf „Nicht erlauben". Speichern Sie das Produkt, und der „In den Warenkorb"-Button verschwindet automatisch.

Dieser Ansatz erfordert keinen Code und funktioniert sofort. Der Nachteil ist, dass das Produkt als „Nicht auf Lager" gekennzeichnet wird, was nicht immer wünschenswert ist (zum Beispiel bei digitalen Produkten oder Dienstleistungen, bei denen „Bestand" keinen Sinn ergibt).
Methode 2: Bestandsmenge auf null setzen
Entfernen Sie im selben Tab „Bestand" den Haken bei „Bestand verwalten" oder setzen Sie die Menge auf 0. Der Button verschwindet, sobald der Restbestand null erreicht.

Diese Methode funktioniert gut für physische Produkte: Sobald die letzte Einheit verkauft ist, verschwindet der Button von selbst. Allerdings erhält das Produkt, wie bei der ersten Methode, den Status „Nicht auf Lager".
Methode 3: Filter nach Produkt-ID
Wenn Sie den Button entfernen müssen, ohne den Status „Auf Lager" zu ändern, verwenden Sie einen Filter, der die ID prüft:
1 function ts_disable_cart_for_product( $purchasable, $product ) { 2 $target_ids = array( 22, 47, 103 ); // Product IDs for which we remove the button 3 if ( in_array( $product->get_id(), $target_ids ) ) { 4 return false; 5 } 6 return $purchasable; 7 } 8 add_filter( 'woocommerce_is_purchasable', 'ts_disable_cart_for_product', 10, 2 );
Hier passiert Folgendes: Der Filter woocommerce_is_purchasable erhält den aktuellen $purchasable-Status und das $product-Objekt. Wenn $product->get_id() mit einer der IDs im Array $target_ids übereinstimmt, gibt er false zurück und der Button wird unterdrückt. Für alle anderen Produkte wird der ursprüngliche Status zurückgegeben.
$product->get_id() ist die seit WooCommerce 3.0 aktuelle Methode. Die alte Eigenschaft $product->id (direkter Feldzugriff) ist veraltet und erzeugt Hinweise in den Logs; verwenden Sie sie nicht.
Sie können das Array $target_ids nach Bedarf erweitern. Die Produkt-ID finden Sie im Admin-Bereich: Fahren Sie mit der Maus über den Produktnamen in der Liste, und die ID erscheint in der Statusleiste des Browsers (oder öffnen Sie das Produkt und sehen Sie sich die Nummer in der URL an: post=22).
6. Button durch eigenen Text ersetzen
Manchmal möchten Sie den Button nicht entfernen, sondern ersetzen. Beispielsweise könnten Sie für Auftragsprodukte „Angebot anfordern" mit einem Link zu einem Kontaktformular anzeigen.
1 function ts_replace_cart_button_single( $html, $product ) { 2 $target_ids = array( 22 ); 3 if ( in_array( $product->get_id(), $target_ids ) ) { 4 return '<a href="/contact" class="button alt">Request a quote</a>'; 5 } 6 return $html; 7 } 8 add_filter( 'woocommerce_loop_add_to_cart_link', 'ts_replace_cart_button_single', 10, 2 );
Dieser Filter fängt das Button-HTML vor der Ausgabe ab und ersetzt es durch einen eigenen Link mit der Klasse .button. Er funktioniert sowohl für das Produktraster als auch für die Produktseite; WooCommerce verwendet in beiden Kontexten denselben Filter.
Für komplexere Logik (unterschiedlicher Text für verschiedene Produkte, ein eigener Button mit Modal-Fenster) sehen Sie sich woocommerce_template_single_add_to_cart für eine vollständige Button-Template-Überschreibung über ein Child-Theme an.
⁉️🤔 Häufig gestellte Fragen
Ist es sicher, die functions.php direkt zu bearbeiten?
Ohne Erfahrung: nein. Die functions.php wird bei jeder Anfrage ausgeführt, und ein Syntaxfehler darin legt die gesamte Seite lahm (weißer Bildschirm). Verwenden Sie das Code Snippets Plugin, das eine Oberfläche zum Hinzufügen von PHP-Fragmenten mit Syntaxprüfung und automatischer Deaktivierung bei schwerwiegenden Fehlern bietet. Alternativ bearbeiten Sie die Datei per FTP/SFTP, nachdem Sie eine funktionierende Kopie lokal gespeichert haben.
Wie blende ich den Button nur für nicht eingeloggte Benutzer aus?
Fügen Sie eine
is_user_logged_in()-Prüfung zu einer der obigen Bedingungen hinzu. Zum Beispiel:if ( ! is_user_logged_in() && is_shop() ) { add_filter(...); }. Gäste sehen eine Präsentation ohne Buttons; registrierte Benutzer erhalten die volle Funktionalität. Dies ist ein häufiger Anwendungsfall für B2B-Shops, bei denen Preise und Warenkorb erst nach dem Login verfügbar werden.
Der Button ist verschwunden, aber Preis und Variationen sind geblieben; ist das normal?
Ja. Die
remove_action-Hooks und derwoocommerce_is_purchasable-Filter entfernen nur den „In den Warenkorb"-Button. Der Preis und die Variationsauswahl (Farbe, Größe) bleiben optisch erhalten. Wenn Sie diese ebenfalls ausblenden müssen, fügen Sie CSS hinzu:.single-product .variations_form, .single-product .price { display: none; }, oder nutzen Sie einen tieferen Eingriff überwoocommerce_get_price_html.
Nach einem Theme-Update waren alle meine Änderungen weg; wie schütze ich mich davor?
Nehmen Sie niemals Änderungen direkt in der
functions.phpdes Parent-Themes vor. Jedes Theme-Update überschreibt die Datei. Drei zuverlässige Optionen: ein Child-Theme (mit eigenerfunctions.php), das Code Snippets Plugin (Snippets leben in der Datenbank und überstehen Updates) oder ein einfaches MU-Plugin (/wp-content/mu-plugins/disable-cart.php, das nicht vom Admin-Bereich aus deaktiviert werden kann und von Updates nicht betroffen ist).
Kann ich den Button für ein bestimmtes Produkt nach einer globalen Deaktivierung wiederherstellen?
Ja. Nachdem der Filter
woocommerce_is_purchasableglobal__return_falsezurückgibt, fügen Sie einen zweiten Filter mit höherer Priorität hinzu, der für die benötigten IDstruezurückgibt:add_filter( 'woocommerce_is_purchasable', 'ts_enable_for_specific', 20, 2 );. Priorität 20 wird nach 10 ausgeführt und kann den Rückgabewert überschreiben.
Welche Methode Sie für Ihre Aufgabe wählen sollten
Wenn Sie eine Präsentationsseite ohne Online-Zahlungen aufbauen, nutzen Sie die globale Deaktivierung mit zwei remove_action-Aufrufen. Müssen Sie Käufe im Katalog sperren, aber in den Produktkarten erhalten? Verwenden Sie den Filter mit is_shop(). Eine problematische Kategorie? Nutzen Sie is_product_category('slug'). Ein Produkt von Hunderten? Verwenden Sie die integrierten Bestandseinstellungen oder den Filter nach ID.
Und das Wichtigste: Bevor Sie etwas in der functions.php ändern, erstellen Sie ein Backup. Nicht über ein Plugin, das Sie gerade bearbeiten wollen, sondern ein vollständiges Backup über Ihr Hosting oder UpdraftPlus. Fünf Minuten für ein Backup sparen Stunden für die Wiederherstellung.



