Skip to content

Alt om WordPress, webutvikling — og mer til

Slik fjerner du Legg i handlekurv-knappen i WooCommerce

Slik fjerner du Legg i handlekurv-knappen i WooCommerce

«Legg i handlekurv»-knappen er den grunnleggende mekanismen i WooCommerce som holder butikken din i gang. Men grunnleggende betyr ikke alltid hensiktsmessig. En utstillingsside uten bestillingsmulighet, et spesialbestillingsprodukt som krever individuell prising, en utsolgt vare som ikke bør avpubliseres ennå: i alle disse tilfellene er standard «Legg i handlekurv» bare i veien.

Du kan ta den brutale tilnærmingen og sette produktstatusen til «skjult», men da faller det ut av katalogen og slutter å bli indeksert. En mye ryddigere løsning er å holde produktkortet synlig mens du fjerner eller erstatter kjøpsknappen. WooCommerce tilbyr flere kroker og filtre for dette, fra global deaktivering til presis fjerning på et enkelt produkt.

Nedenfor finner du alle metodene som fungerer, fra enkle til avanserte. Hver av dem er testet på gjeldende versjon av WooCommerce.

💡 Hurtigoversikt:

  • Hele nettstedet på én gang: to remove_action-kall i functions.php, ett for produktoversikten og ett for produktsiden
  • Hjemmeside og arkivsider: betinget woocommerce_is_purchasable-filter med is_shop()
  • Alle kategorier eller én spesifikk kategori: samme filter med is_product_category() eller is_product_category('slug')
  • Enkeltprodukt: tre metoder, innebygd admin-bryter, nullstilling av lagerbeholdning, filter etter product_id
  • For dem som trenger en knapp: erstatt den med egendefinert tekst eller en «Be om tilbud»-knapp

1. Fjerne knappen fra hele nettstedet

Hvis butikken din fungerer utelukkende som en utstilling uten kjøpsintensjon, er den enkleste tilnærmingen å fjerne knappen globalt ved hjelp av to kroker i det aktive temaets functions.php.

Den første kroken håndterer produktkort i oversikten ([products]-shortkoden, butikksiden, kategorier), mens den andre håndterer individuelle produktsider:

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);

Det er bedre å plassere denne koden ikke direkte i temaets functions.php (noe som risikerer å miste endringer ved oppdatering), men via Code Snippets-utvidelsen eller et barnetema. Før du gjør noen endringer, opprett en sikkerhetskopi; uten en har du ingen steder å rulle tilbake.

2. Skjule knappen på hjemmesiden og arkivsidene

Global deaktivering fungerer ikke for alle. Et vanlig scenario: knappen skal forbli på produktsiden, men forsvinne fra katalogen og hjemmesiden (der produkter vises som en liste).

Her, i stedet for remove_action, er det bedre å bruke woocommerce_is_purchasable-filteret med en is_shop()-betinget sjekk:

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' );

wp-kroken utløses tidlig, før rendering, og unngår gjentatte sjekker som ville gjort siden tregere. is_shop() dekker hovedbutikksiden, og is_front_page() dekker en statisk hjemmeside hvis den viser en WooCommerce-shortkode. Filteret gjelder ikke for produktsider, så kjøp fungerer normalt der.

3. Fjerne knappen fra alle kategorisider

Samme prinsipp, men erstatt is_shop() med is_product_category() uten parameter. Filteret vil fange opp enhver produktkategori:

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' );

Knappen forblir på individuelle produktsider. Dette er nyttig når katalogen fungerer som en utstilling og kjøp kun er tilgjengelig etter at man har navigert til produktkortet, for eksempel slik at brukerne først leser beskrivelsen og spesifikasjonene.

4. Deaktivere knappen for én enkelt kategori

Noen ganger er én kategori i butikken din spesialbestilling mens resten er standard. I så fall trenger du målrettet blokkering etter kategorislug:

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' );

Erstatt 'pod-zakaz' med den faktiske sluggen for målkategorien din. Du finner sluggen i administrasjonspanelet under «Produkter → Kategorier» i «Slug»-kolonnen. Filteret deaktiverer kjøp lydløst for alle produkter i kategorien; knappen vil også forsvinne på produktsiden fordi WooCommerce sjekker is_purchasable() der også.

5. Skjule knappen for et spesifikt produkt

Det vanligste scenarioet: ett produkt av hundrevis må midlertidig vises uten mulighet til å bestille. WooCommerce tilbyr tre måter å gjøre dette på.

Metode 1: innebygd admin-bryter

Gå til redigering av produktet, åpne «Lager»-fanen og sett «Lagerstatus» til «Utsolgt». Sett avkrysningsboksen «Tillat restbestillinger» til «Ikke tillat». Lagre produktet, så forsvinner «Legg i handlekurv»-knappen automatisk.

Konfigurere produktlagerstatus i WooCommerce

Denne tilnærmingen krever ingen kode og fungerer rett ut av boksen. Ulempen er at produktet blir merket som «Utsolgt», noe som ikke alltid er ønskelig (for eksempel for digitale produkter eller tjenester der «lager» ikke gir mening).

Metode 2: nullstilling av lagerbeholdningen

I samme «Lager»-fane, fjern avkrysningen for «Administrer lager» eller sett antallet til 0. Knappen forsvinner når gjenværende beholdning når null.

Nullstille produktantall for å skjule kjøpsknappen

Denne metoden fungerer godt for fysiske produkter: så snart den siste enheten selges, forsvinner knappen av seg selv. Men i likhet med den første metoden får produktet en utsolgtstatus.

Metode 3: filter etter produkt-ID

Hvis du trenger å fjerne knappen uten å endre «på lager»-statusen, bruk et filter som sjekker ID-en:

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 );

Her er hva som skjer: woocommerce_is_purchasable-filteret mottar gjeldende $purchasable-status og $product-objektet. Hvis $product->get_id() samsvarer med én av ID-ene i $target_ids-matrisen, returnerer det false og knappen undertrykkes. For alle andre produkter returneres den opprinnelige statusen.

$product->get_id() er metoden som har vært gjeldende siden WooCommerce 3.0. Den gamle $product->id-egenskapen (direkte felttilgang) er utdatert og genererer varsler i loggene; ikke bruk den.

Du kan utvide $target_ids-matrisen etter behov. Finn produkt-ID-en i administrasjonspanelet: hold musepekeren over produktnavnet i listen, så vises ID-en i nettleserens statuslinje (eller åpne produktet og se på nummeret i URL-en: post=22).

6. Erstatte knappen med egendefinert tekst

Noen ganger trenger du ikke å fjerne knappen; du trenger å erstatte den. For eksempel, for spesialbestillingsprodukter kan du vise «Be om tilbud» med en lenke til et kontaktskjema.

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 );

Dette filteret fanger opp knappens HTML før utdata og erstatter den med en egendefinert lenke ved hjelp av .button-klassen. Det fungerer både for produktoversikten og for produktsiden; WooCommerce bruker det samme filteret i begge sammenhenger.

For mer kompleks logikk (forskjellig tekst for ulike produkter, en egendefinert knapp med et modalt vindu), se nærmere på woocommerce_template_single_add_to_cart for en fullstendig overstyring av knappemalen via et barnetema.

⁉️🤔 Ofte stilte spørsmål

Er det trygt å redigere functions.php direkte?

Uten erfaring, nei. functions.php kjøres ved hver forespørsel, og en syntaksfeil i den legger ned hele nettstedet (hvit skjerm). Bruk Code Snippets-utvidelsen, som gir et grensesnitt for å legge til PHP-fragmenter med syntakssjekk og automatisk deaktivering ved fatale feil. Alternativt kan du redigere via FTP/SFTP etter å ha lagret en fungerende kopi av filen lokalt.

Hvordan skjuler jeg knappen kun for utloggede brukere?

Legg til en is_user_logged_in()-sjekk i hvilken som helst av betingelsene ovenfor. For eksempel: if ( ! is_user_logged_in() && is_shop() ) { add_filter(...); }. Gjester ser en utstilling uten knapper; registrerte brukere får full funksjonalitet. Dette er et vanlig bruksområde for grossistbutikker der priser og handlekurv først blir tilgjengelige etter innlogging.

Knappen forsvant, men prisen og variantene ble værende; er dette normalt?

Ja. remove_action-krokene og woocommerce_is_purchasable-filteret fjerner kun «legg i handlekurv»-knappen. Prisen og variantvelgerne (farge, størrelse) forblir synlige. Hvis du trenger å skjule disse også, legg til CSS: .single-product .variations_form, .single-product .price { display: none; }, eller bruk et dypere inngrep via woocommerce_get_price_html.

Etter en temaoppdatering forsvant alle endringene mine; hvordan beskytter jeg meg mot dette?

Gjør aldri endringer direkte i hovedtemaets functions.php. Enhver temaoppdatering vil overskrive filen. Tre pålitelige alternativer: et barnetema (med sin egen functions.php), Code Snippets-utvidelsen (kodebitene lever i databasen og overlever oppdateringer), eller en enkel MU-plugin (/wp-content/mu-plugins/disable-cart.php, som ikke kan deaktiveres fra administrasjonspanelet og ikke påvirkes av oppdateringer).

Kan jeg gjenopprette knappen for et spesifikt produkt etter en global deaktivering?

Ja. Etter at woocommerce_is_purchasable-filteret globalt returnerer __return_false, legg til et nytt filter med høyere prioritet som returnerer true for de nødvendige ID-ene: add_filter( 'woocommerce_is_purchasable', 'ts_enable_for_specific', 20, 2 );. Prioritet 20 kjøres etter 10 og kan overstyre returverdien.

Hvilken metode du bør velge for din oppgave

Hvis du bygger en utstilling uten nettbetaling, bruk global deaktivering med to remove_action-kall. Trenger du å blokkere kjøp i katalogen, men beholde dem i produktkort? Bruk filteret med is_shop(). Én problematisk kategori? Bruk is_product_category('slug'). Ett produkt av hundrevis? Bruk de innebygde lagerinnstillingene eller filteret etter ID.

Og viktigst av alt: før du endrer noe i functions.php, ta en sikkerhetskopi. Ikke via en utvidelse du er i ferd med å redigere, men en full sikkerhetskopi via din hosting eller UpdraftPlus. Fem minutter brukt på sikkerhetskopi sparer timer med gjenoppretting.