
Kuinka poistaa Lisää ostoskoriin -painike WooCommercesta
"Lisää ostoskoriin" -painike on WooCommercen perusmekanismi, joka pitää kauppasi toiminnassa. Mutta perus ei tarkoita aina sopivaa. Esittelysivusto ilman tilausmahdollisuutta, yksilöllisen hinnoittelun vaativa tilaustuote, loppuunmyyty tuote jota ei vielä haluta poistaa julkaisusta: kaikissa näissä tapauksissa tavallinen Lisää ostoskoriin on vain tiellä.
Voisit ottaa karkean lähestymistavan ja asettaa tuotteen tilaksi "piilotettu", mutta silloin se putoaa pois katalogista eikä sitä enää indeksoida. Paljon siistimpi ratkaisu on pitää tuotekortti näkyvissä ja poistaa tai korvata ostopainike. WooCommerce tarjoaa tähän useita koukkuja ja suodattimia, globaalista poistamisesta yksittäisen tuotteen tarkkaan piilottamiseen.
Alla ovat kaikki toimivat menetelmät yksinkertaisesta edistyneeseen. Jokainen on testattu WooCommercen nykyisellä versiolla.
💡 Pikakatsaus:
- Koko sivusto kerralla: kaksi
remove_action-kutsuafunctions.php-tiedostossa, yksi tuoteruudukolle ja yksi tuotesivulle - Etusivu ja arkistot: ehdollinen
woocommerce_is_purchasable-suodatin käyttäenis_shop()-funktiota - Kaikki kategoriat tai yksi tietty kategoria: sama suodatin käyttäen
is_product_category()- taiis_product_category('slug')-funktiota - Yksittäinen tuote: kolme tapaa, sisäänrakennettu hallintakytkin, varaston nollaus, suodatin
product_id-tunnuksella - Niille jotka tarvitsevat painikkeen: korvaa se mukautetulla tekstillä tai "Pyydä tarjous" -painikkeella
1. Painikkeen poistaminen koko sivustolta
Jos kauppasi toimii puhtaasti esittelysivustona ilman ostotarkoitusta, yksinkertaisin tapa on poistaa painike globaalisti käyttämällä kahta koukkua aktiivisen teemasi functions.php-tiedostossa.
Ensimmäinen koukku käsittelee tuotekortit ruudukossa ([products]-lyhytkoodi, kauppasivu, kategoriat), kun taas toinen käsittelee yksittäiset tuotesivut:
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 );
Tämä koodi on parempi sijoittaa ei suoraan teemasi functions.php-tiedostoon (jolloin muutokset uhkaavat kadota päivityksessä), vaan Code Snippets -lisäosan tai lapsiteeman kautta. Ennen muokkausten tekemistä, luo varmuuskopio; ilman sitä sinulla ei ole mihin palata.
2. Painikkeen piilottaminen etusivulla ja arkistosivuilla
Globaali poistaminen ei toimi kaikille. Yleinen skenaario: painikkeen tulisi säilyä tuotesivulla mutta kadota katalogista ja etusivulta (jossa tuotteet näytetään listana).
Tässä on remove_action-kutsun sijaan parempi käyttää woocommerce_is_purchasable-suodatinta is_shop()-ehtotarkistuksen kanssa:
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-koukku laukeaa aikaisin, ennen renderöintiä, ja välttää toistuvat tarkistukset jotka hidastaisivat sivua. is_shop() kattaa pääkauppasivun, ja is_front_page() kattaa staattisen etusivun jos se näyttää WooCommerce-lyhytkoodia. Suodatin ei koske tuotesivuja, joten ostaminen toimii siellä normaalisti.
3. Painikkeen poistaminen kaikilta kategoriasivuilta
Sama periaate, mutta korvaa is_shop() funktiolla is_product_category() ilman parametria. Suodatin nappaa minkä tahansa tuotekategorian:
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' );
Painike säilyy yksittäisillä tuotesivuilla. Tämä on hyödyllistä kun katalogi toimii esittelynä ja ostaminen on mahdollista vasta tuotekortille siirtymisen jälkeen, esimerkiksi jotta käyttäjät lukevat ensin kuvauksen ja tekniset tiedot.
4. Painikkeen poistaminen käytöstä yhdelle kategorialle
Joskus yksi kategoria kaupassasi on tilaustuote, kun taas loput ovat vakiotuotteita. Siinä tapauksessa tarvitset kohdennetun eston kategorian polkutunnuksella:
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' );
Korvaa 'pod-zakaz' kohdekategoriasi todellisella polkutunnuksella. Löydät polkutunnuksen hallintapaneelista kohdasta "Tuotteet → Kategoriat" "Polkutunnus"-sarakkeesta. Suodatin poistaa ostomahdollisuuden hiljaisesti kaikilta kategorian tuotteilta; painike katoaa myös tuotesivulta, koska WooCommerce tarkistaa is_purchasable()-funktion sielläkin.
5. Painikkeen piilottaminen tietylle tuotteelle
Yleisin skenaario: yksi tuote sadoista täytyy tilapäisesti näyttää ilman tilausmahdollisuutta. WooCommerce tarjoaa kolme tapaa tähän.
Tapa 1: sisäänrakennettu hallintakytkin
Siirry muokkaamaan tuotetta, avaa "Varasto"-välilehti ja vaihda "Varastotilanne" tilaan "Loppu varastosta". Aseta "Salli jälkitilaukset" -valintaruutu tilaan "Älä salli". Tallenna tuote, ja Lisää ostoskoriin -painike katoaa automaattisesti.

Tämä lähestymistapa ei vaadi koodia ja toimii suoraan. Haittapuolena on, että tuote merkitään "Loppu varastosta", mikä ei ole aina toivottavaa (esimerkiksi digitaalisille tuotteille tai palveluille, joissa "varasto" ei ole mielekäs käsite).
Tapa 2: varastomäärän nollaus
Samalla "Varasto"-välilehdellä poista valinta "Hallinnoi varastoa" tai aseta määräksi 0. Painike katoaa kun jäljellä oleva varasto saavuttaa nollan.

Tämä menetelmä toimii hyvin fyysisille tuotteille: heti kun viimeinen kappale myydään, painike katoaa itsestään. Kuitenkin, kuten ensimmäisessä tavassa, tuote saa loppuunmyyty-tilan.
Tapa 3: suodatin tuotetunnuksen perusteella
Jos sinun täytyy poistaa painike muuttamatta "varastossa"-tilaa, käytä suodatinta joka tarkistaa tunnuksen:
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 );
Tässä mitä tapahtuu: woocommerce_is_purchasable-suodatin vastaanottaa nykyisen $purchasable-tilan ja $product-objektin. Jos $product->get_id() vastaa jotakin $target_ids-taulukon tunnuksista, se palauttaa false ja painike tukahdutetaan. Kaikille muille tuotteille palautetaan alkuperäinen tila.
$product->get_id() on WooCommerce 3.0:sta lähtien käytössä ollut metodi. Vanha $product->id-ominaisuus (suora kenttäviittaus) on vanhentunut ja tuottaa ilmoituksia lokeihin; älä käytä sitä.
Voit laajentaa $target_ids-taulukkoa tarpeen mukaan. Löydät tuotetunnuksen hallintapaneelista: vie hiiri tuotteen nimen päälle listassa, jolloin tunnus ilmestyy selaimen tilariville (tai avaa tuote ja katso numero URL-osoitteesta: post=22).
6. Painikkeen korvaaminen mukautetulla tekstillä
Joskus sinun ei tarvitse poistaa painiketta; sinun täytyy korvata se. Esimerkiksi tilaustuotteille saatat näyttää "Pyydä tarjous" linkillä yhteydenottolomakkeelle.
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 );
Tämä suodatin kaappaa painikkeen HTML:n ennen tulostusta ja korvaa sen mukautetulla linkillä käyttäen .button-luokkaa. Se toimii sekä tuoteruudukossa että tuotesivulla; WooCommerce käyttää samaa suodatinta molemmissa yhteyksissä.
Monimutkaisempaa logiikkaa varten (eri teksti eri tuotteille, mukautettu painike modaali-ikkunalla) tutustu woocommerce_template_single_add_to_cart-funktioon täydellistä painikepohjan ohitusta varten lapsiteeman kautta.
⁉️🤔 Usein kysytyt kysymykset
Onko functions.php-tiedoston suora muokkaaminen turvallista?
Ilman kokemusta ei. functions.php suoritetaan jokaisella pyynnöllä, ja syntaksivirhe siinä kaataa koko sivuston (valkoinen ruutu). Käytä Code Snippets -lisäosaa, joka tarjoaa käyttöliittymän PHP-pätkien lisäämiseen syntaksitarkistuksella ja automaattisella käytöstäpoistolla vakavissa virheissä. Vaihtoehtoisesti muokkaa FTP/SFTP:n kautta tallennettuasi toimivan kopion tiedostosta paikallisesti.
Kuinka piilotan painikkeen vain kirjautumattomilta käyttäjiltä?
Lisää
is_user_logged_in()-tarkistus mihin tahansa yllä olevista ehdoista. Esimerkiksi:if ( ! is_user_logged_in() && is_shop() ) { add_filter(...); }. Vieraat näkevät esittelyn ilman painikkeita; rekisteröityneet käyttäjät saavat täyden toiminnallisuuden. Tämä on yleinen käyttötapaus tukkuvarastoille, joissa hinnat ja ostoskori tulevat saataville vasta kirjautumisen jälkeen.
Painike katosi mutta hinta ja variaatiot säilyivät; onko tämä normaalia?
Kyllä.
remove_action-koukut jawoocommerce_is_purchasable-suodatin poistavat vain lisää ostoskoriin -painikkeen. Hinta ja variaatiovalitsimet (väri, koko) säilyvät visuaalisesti. Jos sinun täytyy piilottaa myös ne, lisää CSS:.single-product .variations_form, .single-product .price { display: none; }, tai käytä syvempää interventiotawoocommerce_get_price_html-kautta.
Teemapäivityksen jälkeen kaikki muutokseni katosivat; kuinka suojaudun tältä?
Älä koskaan tee muutoksia suoraan pääteeman
functions.php-tiedostoon. Mikä tahansa teemapäivitys ylikirjoittaa tiedoston. Kolme luotettavaa vaihtoehtoa: lapsiteema (omallafunctions.php-tiedostollaan), Code Snippets -lisäosa (pätkät elävät tietokannassa ja säilyvät päivityksissä), tai yksinkertainen MU-lisäosa (/wp-content/mu-plugins/disable-cart.php, jota ei voi poistaa käytöstä hallintapaneelista ja johon päivitykset eivät vaikuta).
Voinko palauttaa painikkeen tietylle tuotteelle globaalin poiston jälkeen?
Kyllä. Kun
woocommerce_is_purchasable-suodatin on palauttanut globaalisti__return_false, lisää toinen suodatin korkeammalla prioriteetilla, joka palauttaatruetarvituille tunnuksille:add_filter( 'woocommerce_is_purchasable', 'ts_enable_for_specific', 20, 2 );. Prioriteetti 20 suoritetaan 10:n jälkeen ja voi ohittaa paluuarvon.
Mikä menetelmä valita tehtävääsi
Jos rakennat esittelysivustoa ilman verkkomaksuja, käytä globaalia poistoa kahdella remove_action-kutsulla. Tarvitseeko estää ostot katalogissa mutta säilyttää ne tuotekorteissa? Käytä suodatinta is_shop()-funktiolla. Yksi ongelmallinen kategoria? Käytä is_product_category('slug'). Yksi tuote sadoista? Käytä sisäänrakennettuja varastoasetuksia tai tunnukseen perustuvaa suodatinta.
Ja mikä tärkeintä: ennen kuin muutat mitään functions.php-tiedostossa, tee varmuuskopio. Ei lisäosan kautta jota olet muokkaamassa, vaan täysi varmuuskopio hotellipalvelusi tai UpdraftPlus kautta. Viisi minuuttia varmuuskopiointiin säästää tunteja palauttamisessa.



