Skip to content

Alles für WordPress, Webentwicklung — und mehr

So entfernen Sie den In den Warenkorb-Button in WooCommerce

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 in functions.php, einer für das Produktraster und einer für die Produktseite
  • Startseite und Archive: bedingter woocommerce_is_purchasable-Filter mit is_shop()
  • Alle Kategorien oder eine bestimmte Kategorie: derselbe Filter mit is_product_category() oder is_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
2remove_action(
3 'woocommerce_after_shop_loop_item',
4 'woocommerce_template_loop_add_to_cart'
5);
6
7// Remove button from product page
8remove_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:

1function ts_hide_cart_on_shop() {
2 if ( is_shop() || is_front_page() ) {
3 add_filter( 'woocommerce_is_purchasable', '__return_false' );
4 }
5}
6add_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:

1function ts_hide_cart_in_categories() {
2 if ( is_product_category() ) {
3 add_filter( 'woocommerce_is_purchasable', '__return_false' );
4 }
5}
6add_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:

1function ts_hide_cart_for_category() {
2 if ( is_product_category( 'pod-zakaz' ) ) {
3 add_filter( 'woocommerce_is_purchasable', '__return_false' );
4 }
5}
6add_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.

Produktbestandsstatus in WooCommerce konfigurieren

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.

Produktmenge auf Null setzen, um den Kaufen-Button auszublenden

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:

1function 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}
8add_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.

1function 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}
8add_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 der woocommerce_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 über woocommerce_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.php des Parent-Themes vor. Jedes Theme-Update überschreibt die Datei. Drei zuverlässige Optionen: ein Child-Theme (mit eigener functions.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_purchasable global __return_false zurückgibt, fügen Sie einen zweiten Filter mit höherer Priorität hinzu, der für die benötigten IDs true zurü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.