
Kuidas eemaldada WooCommerce'is lisa ostukorvi nupp
„Lisa ostukorvi" nupp on WooCommerce'i põhimehhanism, mis hoiab sinu poe töös. Kuid põhiline ei tähenda alati sobivat. Esitlussait ilma tellimisvõimaluseta, eritellimusel toode, mis vajab individuaalset hinnastamist, läbimüüdud toode, mida ei tohiks veel avaldamata jätta: kõigil neil juhtudel on tavaline „Lisa ostukorvi" nupp lihtsalt takistuseks.
Võid kasutada jämedamat lähenemist ja määrata toote olekuks „peidetud", kuid siis kaob see kataloogist ja seda ei indekseerita. Palju puhtam lahendus on hoida tootekaart nähtaval, eemaldades või asendades ostunupu. WooCommerce pakub selleks mitmeid konkse ja filtreid alates globaalsest keelamisest kuni täpse peitmiseni ühel tootel.
Allpool on kõik töötavad meetodid lihtsatest keerukateni. Igaüht neist on testitud WooCommerce'i praegusel versioonil.
💡 Kiirülevaade:
- Kogu sait korraga: kaks
remove_actionväljakutset failisfunctions.php, üks tootevõrgu ja teine tootelehe jaoks - Avaleht ja arhiivid: tingimuslik
woocommerce_is_purchasablefilter, kasutadesis_shop() - Kõik kategooriad või üks konkreetne kategooria: sama filter koos
is_product_category()võiis_product_category('slug') - Üksik toode: kolm meetodit, sisseehitatud administraatori lüliti, laoseisu nullimine, filtreerimine
product_idjärgi - Neile, kes vajavad nuppu: asenda see kohandatud teksti või „Küsi pakkumist" nupuga
1. Nupu eemaldamine kogu saidilt
Kui sinu pood toimib puhtalt esitlusena ilma ostukavatsuseta, on lihtsaim lähenemine nupu globaalne eemaldamine, kasutades kahte konksu oma aktiivse teema functions.php failis.
Esimene konks käsitleb tootekaarte võrgus ([products] lühikood, poeleht, kategooriad), teine aga üksikuid tootelehti:
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 );
Parem on paigutada see kood mitte otse oma teema functions.php faili (mis riskib uuendamisel muudatuste kaotamisega), vaid Code Snippets pluginat või alamteemat kasutades. Enne muudatuste tegemist loo varukoopia; ilma selleta pole sul kuhugi tagasi pöörduda.
2. Nupu peitmine avalehel ja arhiivilehtedel
Globaalne keelamine ei sobi kõigile. Levinud stsenaarium: nupp peaks jääma tootelehele, kuid kaduma kataloogist ja avalehelt (kus tooteid kuvatakse loendina).
Siin on remove_action asemel parem kasutada woocommerce_is_purchasable filtrit koos is_shop() tingimusliku kontrolliga:
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 konks käivitub varakult, enne renderdamist, ja väldib korduvaid kontrolle, mis aeglustaksid lehte. is_shop() hõlmab peamist poelehte ja is_front_page() staatilist avalehte, kui see kuvab WooCommerce'i lühikoodi. Filter ei rakendu tootelehtedele, seega toimib ostmine seal normaalselt.
3. Nupu eemaldamine kõigilt kategoorialehtedelt
Sama põhimõte, kuid asenda is_shop() funktsiooniga is_product_category() ilma parameetrita. Filter haarab kõiki tootekategooriaid:
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' );
Nupp jääb alles üksikutel tootelehtedel. See on kasulik, kui kataloog toimib esitlusena ja ostmine on saadaval alles pärast tootekaardile liikumist, näiteks selleks, et kasutajad loeksid kõigepealt kirjeldust ja spetsifikatsioone.
4. Nupu keelamine ühe kategooria jaoks
Mõnikord on sinu poes üks kategooria eritellimusel, ülejäänud aga standardsed. Sel juhul vajad sihitud blokeerimist kategooria nime järgi:
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' );
Asenda 'pod-zakaz' oma sihtkategooria tegeliku nimega. Nime leiad administraatori paneelist jaotisest „Tooted → Kategooriad" veerust „Nimi". Filter keelab vaikimisi ostmise kõigile selle kategooria toodetele; nupp kaob ka tootelehelt, sest WooCommerce kontrollib is_purchasable() ka seal.
5. Nupu peitmine konkreetse toote puhul
Kõige tavalisem stsenaarium: ühte toodet sadade seast on vaja ajutiselt kuvada ilma tellimisvõimaluseta. WooCommerce pakub selleks kolme võimalust.
Meetod 1: sisseehitatud administraatori lüliti
Mine toote muutmise lehele, ava vahekaart „Laoseis" ja lülita „Laoseisu olek" valikule „Laost otsas". Sea märkeruut „Luba järeltellimused" valikule „Ära luba". Salvesta toode ja „Lisa ostukorvi" nupp kaob automaatselt.

See lähenemine ei vaja koodi ja töötab koheselt. Puuduseks on see, et toode märgitakse „Laost otsas", mis ei ole alati soovitav (näiteks digitaalsete toodete või teenuste puhul, kus „laoseis" ei ole asjakohane).
Meetod 2: laoseisu koguse nullimine
Samal vahekaardil „Laoseis" eemalda märge „Halda laoseisu" või sea kogus väärtusele 0. Nupp kaob, kui järelejäänud laoseis jõuab nulli.

See meetod töötab hästi füüsiliste toodete puhul: niipea kui viimane ühik müüakse, kaob nupp iseenesest. Kuid nagu esimese meetodi puhul, saab toode laost otsas oleku.
Meetod 3: filtreerimine toote ID järgi
Kui pead nupu eemaldama ilma „laos" olekut muutmata, kasuta filtrit, mis kontrollib ID-d:
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 );
Toimub järgmine: woocommerce_is_purchasable filter saab praeguse $purchasable oleku ja $product objekti. Kui $product->get_id() vastab ühele $target_ids massiivi ID-dest, tagastab see false ja nupp surutakse maha. Kõigi teiste toodete puhul tagastatakse algne olek.
$product->get_id() on WooCommerce 3.0-st alates kehtiv meetod. Vana $product->id omadus (otsene väljale juurdepääs) on aegunud ja tekitab logidesse märkusi; ära seda kasuta.
Saad $target_ids massiivi vastavalt vajadusele laiendada. Toote ID leiad administraatori paneelist: liigu toote nime kohale loendis ja ID kuvatakse brauseri olekuribal (või ava toode ja vaata numbrit URL-is: post=22).
6. Nupu asendamine kohandatud tekstiga
Mõnikord pole vaja nuppu eemaldada, vaid see asendada. Näiteks eritellimusel toodete puhul võid kuvada „Küsi pakkumist" koos lingiga kontaktvormile.
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 );
See filter püüab nupu HTML-i enne väljundit kinni ja asendab selle kohandatud lingiga, kasutades .button klassi. See töötab nii tootevõrgu kui ka tootelehe puhul; WooCommerce kasutab mõlemas kontekstis sama filtrit.
Keerukama loogika jaoks (erinev tekst erinevatele toodetele, kohandatud nupp modaalaknaga) uuri woocommerce_template_single_add_to_cart, et alamteema kaudu nupu mall täielikult alistada.
⁉️🤔 Korduma kippuvad küsimused
Kas functions.php otse muutmine on ohutu?
Ilma kogemuseta ei ole. functions.php käivitatakse igal päringul ja süntaksiviga selles toob kaasa kogu saidi kokkujooksmise (valge ekraan). Kasuta Code Snippets pluginat, mis pakub liidest PHP fragmentide lisamiseks koos süntaksikontrolli ja automaatse keelamisega fataalsete vigade korral. Alternatiivina muuda faili FTP/SFTP kaudu, olles eelnevalt salvestanud failist töötava koopia lokaalselt.
Kuidas peita nuppu ainult sisse logimata kasutajate eest?
Lisa
is_user_logged_in()kontroll ükskõik millisele ülaltoodud tingimusele. Näiteks:if ( ! is_user_logged_in() && is_shop() ) { add_filter(...); }. Külalised näevad esitlust ilma nuppudeta; registreeritud kasutajad saavad täieliku funktsionaalsuse. See on levinud kasutusjuht hulgimüügipoodide puhul, kus hinnad ja ostukorv muutuvad kättesaadavaks alles pärast sisselogimist.
Nupp kadus, kuid hind ja variatsioonid jäid alles; kas see on normaalne?
Jah.
remove_actionkonksud jawoocommerce_is_purchasablefilter eemaldavad ainult lisa-ostukorvi nupu. Hind ja variatsioonivalijad (värv, suurus) jäävad visuaalselt alles. Kui pead ka need peitma, lisa CSS:.single-product .variations_form, .single-product .price { display: none; }või kasuta sügavamat sekkumistwoocommerce_get_price_htmlkaudu.
Pärast teema uuendamist kadusid kõik mu muudatused; kuidas selle vastu kaitsta?
Ära kunagi tee muudatusi otse vanemteema
functions.phpfailis. Iga teema uuendus kirjutab faili üle. Kolm usaldusväärset võimalust: alamteema (omafunctions.phpfailiga), Code Snippets plugin (fragmendid asuvad andmebaasis ja säilivad uuendustel) või lihtne MU-plugin (/wp-content/mu-plugins/disable-cart.php, mida ei saa administraatori paneelist keelata ja mida uuendused ei mõjuta).
Kas ma saan pärast globaalset keelamist konkreetse toote nupu taastada?
Jah. Pärast seda, kui
woocommerce_is_purchasablefilter globaalselt tagastab__return_false, lisa teine filter kõrgema prioriteediga, mis tagastab vajalike ID-de puhultrue:add_filter( 'woocommerce_is_purchasable', 'ts_enable_for_specific', 20, 2 );. Prioriteet 20 käivitatakse pärast 10 ja see võib tagastusväärtuse alistada.
Millist meetodit oma ülesande jaoks valida
Kui ehitad esitlust ilma veebimakseteta, kasuta globaalset keelamist kahe remove_action väljakutsega. Vaja blokeerida ostud kataloogis, kuid säilitada need tootekaartidel? Kasuta filtrit koos is_shop(). Üks probleemne kategooria? Kasuta is_product_category('slug'). Üks toode sadade seast? Kasuta sisseehitatud laoseisu seadeid või ID-põhist filtrit.
Ja mis kõige tähtsam: enne kui midagi functions.php failis muudad, tee varukoopia. Mitte läbi pluginat, mida kavatsed muuta, vaid täielik varukoopia oma hostingu või UpdraftPlus kaudu. Viis minutit varundamisele säästab tunde taastamist.



