
Hur man tar bort Lägg till i varukorg-knappen i WooCommerce
"Lägg i varukorg"-knappen är den grundläggande mekanismen i WooCommerce som håller din butik igång. Men grundläggande betyder inte alltid lämplig. En utställningssajt utan beställningsfunktion, en specialbeställningsprodukt som kräver individuell prissättning, en slutsåld vara som inte bör avpubliceras än: i alla dessa fall är standardknappen Lägg i varukorg bara i vägen.
Du kan ta den trubbiga vägen och sätta produktstatusen till "dold", men då försvinner den ur katalogen och slutar indexeras. En mycket renare lösning är att behålla produktkortet synligt men ta bort eller ersätta köpknappen. WooCommerce erbjuder flera hooks och filter för detta, från global inaktivering till punktvis borttagning på en enskild produkt.
Nedan finns alla fungerande metoder, från enkla till avancerade. Var och en har testats på den aktuella versionen av WooCommerce.
💡 Snabb översikt:
- Hela sajten på en gång: två
remove_action-anrop ifunctions.php, ett för produktgallret och ett för produktsidan - Startsida och arkiv: villkorligt
woocommerce_is_purchasable-filter medis_shop() - Alla kategorier eller en specifik kategori: samma filter med
is_product_category()elleris_product_category('slug') - Enskild produkt: tre metoder, inbyggd admin-växel, nollställning av lager, filter efter
product_id - För dig som behöver en knapp: ersätt den med egen text eller en "Begär offert"-knapp
1. Ta bort knappen från hela sajten
Om din butik fungerar som en ren utställning utan köpfunktion är den enklaste metoden att ta bort knappen globalt med två hooks i ditt aktiva temas functions.php.
Den första hooken hanterar produktkort i gallret ([products]-shortcoden, butikssidan, kategorier), medan den andra hanterar enskilda produktsidor:
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 );
Det är bättre att placera denna kod inte direkt i ditt temas functions.php (vilket riskerar att förlora ändringar vid uppdatering), utan via tillägget Code Snippets eller ett barntema. Innan du gör några ändringar, skapa en säkerhetskopia; utan en har du ingenstans att återställa från.
2. Dölja knappen på startsidan och arkivsidor
Global inaktivering fungerar inte för alla. Ett vanligt scenario: knappen ska finnas kvar på produktsidan men försvinna från katalogen och startsidan (där produkter visas som en lista).
Här är det bättre att använda woocommerce_is_purchasable-filtret med en is_shop()-villkorskontroll istället för remove_action:
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' );
wp-hooken körs tidigt, före rendering, och undviker upprepade kontroller som skulle sakta ner sidan. is_shop() täcker huvudsidan för butiken, och is_front_page() täcker en statisk startsida om den visar en WooCommerce-shortcode. Filtret gäller inte produktsidor, så köp fungerar normalt där.
3. Ta bort knappen från alla kategorisidor
Samma princip, men ersätt is_shop() med is_product_category() utan parameter. Filtret kommer att fånga alla produktkategorier:
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' );
Knappen finns kvar på enskilda produktsidor. Detta är användbart när katalogen fungerar som en utställning och köp endast är tillgängligt efter att man navigerat till produktkortet, till exempel för att användare först ska läsa beskrivning och specifikationer.
4. Inaktivera knappen för en enskild kategori
Ibland är en kategori i din butik specialbeställning medan resten är standard. I så fall behöver du riktad blockering efter kategoris 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' );
Ersätt 'pod-zakaz' med den faktiska sluggen för din målkategori. Du hittar sluggen i adminpanelen under "Produkter → Kategorier" i kolumnen "Slug". Filtret inaktiverar köp tyst för alla produkter i kategorin; knappen försvinner också på produktsidan eftersom WooCommerce kontrollerar is_purchasable() även där.
5. Dölja knappen för en specifik produkt
Det vanligaste scenariot: en produkt av hundratals behöver tillfälligt visas utan möjlighet att beställa. WooCommerce erbjuder tre sätt att göra detta.
Metod 1: inbyggd admin-växel
Gå till redigera produkten, öppna fliken "Lager" och ändra "Lagerstatus" till "Slut i lager". Sätt kryssrutan "Tillåt restnoteringar" till "Tillåt inte". Spara produkten, så försvinner Lägg i varukorg-knappen automatiskt.

Denna metod kräver ingen kod och fungerar direkt. Nackdelen är att produkten markeras som "Slut i lager", vilket inte alltid är önskvärt (till exempel för digitala produkter eller tjänster där "lager" inte är relevant).
Metod 2: nollställning av lagersaldot
På samma flik "Lager", avmarkera "Lagerhantering" eller sätt kvantiteten till 0. Knappen försvinner när återstående lager når noll.

Denna metod fungerar bra för fysiska produkter: så fort den sista enheten säljs försvinner knappen av sig själv. Men precis som den första metoden får produkten statusen slut i lager.
Metod 3: filter efter produkt-ID
Om du behöver ta bort knappen utan att ändra statusen "i lager", använd ett filter som kontrollerar ID:t:
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 );
Här är vad som händer: woocommerce_is_purchasable-filtret tar emot den aktuella $purchasable-statusen och $product-objektet. Om $product->get_id() matchar ett av ID:na i $target_ids-arrayen returnerar det false och knappen tas bort. För alla andra produkter returneras den ursprungliga statusen.
$product->get_id() är den metod som gäller sedan WooCommerce 3.0. Den gamla egenskapen $product->id (direkt fältåtkomst) är föråldrad och genererar notiser i loggarna; använd den inte.
Du kan utöka $target_ids-arrayen efter behov. Hitta produkt-ID:t i adminpanelen: för muspekaren över produktnamnet i listan så visas ID:t i webbläsarens statusfält (eller öppna produkten och titta på numret i URL:en: post=22).
6. Ersätta knappen med egen text
Ibland behöver du inte ta bort knappen; du behöver ersätta den. Till exempel kan du för specialbeställningsprodukter visa "Begär offert" med en länk till ett kontaktformulär.
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 );
Detta filter fångar upp knappens HTML före utmatning och ersätter den med en anpassad länk med klassen .button. Det fungerar både för produktgallret och för produktsidan; WooCommerce använder samma filter i båda sammanhangen.
För mer komplex logik (olika text för olika produkter, en anpassad knapp med ett modalfönster), titta på woocommerce_template_single_add_to_cart för en fullständig överskrivning av knappmallen via ett barntema.
⁉️🤔 Vanliga frågor
Är det säkert att redigera functions.php direkt?
Utan erfarenhet, nej. functions.php körs vid varje förfrågan, och ett syntaxfel i den fäller hela sajten (vit skärm). Använd tillägget Code Snippets, som ger ett gränssnitt för att lägga till PHP-fragment med syntaxkontroll och automatisk inaktivering vid fatala fel. Alternativt, redigera via FTP/SFTP efter att ha sparat en fungerande kopia av filen lokalt.
Hur döljer jag knappen endast för utloggade användare?
Lägg till en
is_user_logged_in()-kontroll till något av villkoren ovan. Till exempel:if ( ! is_user_logged_in() && is_shop() ) { add_filter(...); }. Gäster ser en utställning utan knappar; registrerade användare får full funktionalitet. Detta är ett vanligt användningsfall för grossistbutiker där priser och varukorg endast blir tillgängliga efter inloggning.
Knappen försvann men priset och variationerna finns kvar; är detta normalt?
Ja.
remove_action-hookarna ochwoocommerce_is_purchasable-filtret tar endast bort lägg-i-varukorg-knappen. Priset och variationsväljarna (färg, storlek) finns kvar visuellt. Om du behöver dölja även dessa, lägg till CSS:.single-product .variations_form, .single-product .price { display: none; }, eller använd ett djupare ingrepp viawoocommerce_get_price_html.
Efter en temauppdatering försvann alla mina ändringar; hur skyddar jag mig mot detta?
Gör aldrig ändringar direkt i huvudtemats
functions.php. Varje temauppdatering kommer att skriva över filen. Tre pålitliga alternativ: ett barntema (med en egenfunctions.php), tillägget Code Snippets (fragmenten finns i databasen och överlever uppdateringar), eller ett enkelt MU-tillägg (/wp-content/mu-plugins/disable-cart.php, som inte kan inaktiveras från adminpanelen och inte påverkas av uppdateringar).
Kan jag återställa knappen för en specifik produkt efter en global inaktivering?
Ja. Efter att
woocommerce_is_purchasable-filtret globalt returnerar__return_false, lägg till ett andra filter med högre prioritet som returnerartrueför de önskade ID:na:add_filter( 'woocommerce_is_purchasable', 'ts_enable_for_specific', 20, 2 );. Prioritet 20 körs efter 10 och kan överskrida returvärdet.
Vilken metod du ska välja för din uppgift
Om du bygger en utställning utan onlinebetalningar, använd den globala inaktiveringen med två remove_action-anrop. Behöver du blockera köp i katalogen men behålla dem i produktkorten? Använd filtret med is_shop(). En problematisk kategori? Använd is_product_category('slug'). En produkt av hundratals? Använd de inbyggda lagerinställningarna eller filtret efter ID.
Och viktigast av allt: innan du ändrar något i functions.php, gör en säkerhetskopia. Inte via ett tillägg du är på väg att redigera, utan en fullständig säkerhetskopia via ditt webbhotell eller UpdraftPlus. Fem minuter på en säkerhetskopia sparar timmar av återställning.



