Hogyan engedélyezhető az utánvét csak bizonyos megyékben a WooCommerce-ben
Gyakorlati útmutató az utánvét régió szerinti korlátozásához a WooCommerce-ben, szállítási zónák vagy egyetlen apró kódrészlet segítségével, felesleges bővítmények nélkül.
Az utánvét (COD) jól értékesít, de ritkán akarod mindenhol felkínálni. Lehet, hogy a futárszolgálatod csak bizonyos területeken támogatja az utánvétet, lehet, hogy egyes régiókban túl sok a visszautasított csomag, vagy helyben szeretnél utánvétet, máshol pedig online fizetést. A jó hír: a WooCommerce pontosan ezt teszi lehetővé.
A bökkenő az, hogy a WooCommerce-ben nincs olyan gomb, hogy „fogadj el utánvétet A és B megyében, de a többiben ne". Az utánvét fizetési mód a szállítási módokhoz kötődik, nem közvetlenül egy régióhoz. Ha ezt egyszer megérted, a többi egyszerű. Két tiszta megoldást mutatok: az egyik kód nélküli, szállítási zónák használatával, a másik egy apró kódrészlettel, amely a cím régiója alapján szűr. Válaszd azt, amelyik illik az üzletedhez.
Miért nem tudod egyszerűen bepipálni, hogy „utánvét megyénként"
A WooCommerce-ben az utánvét (Cash on delivery) átjárónak egyetlen beállítása fontos a korlátozáshoz: „Engedélyezés szállítási módokhoz" (Enable for shipping methods). A fizetési beállítások között nincs régió mező.
Tehát a valódi logika a következő:
- A vásárló régiója határozza meg, hogy a rendelés melyik szállítási zónába esik.
- A szállítási zóna határozza meg, hogy milyen szállítási módokat lát a vásárló.
- A szállítási mód határozza meg, hogy egyáltalán megjelenik-e az utánvét.
Nem közvetlenül „engedélyezed az utánvétet régiónként" — hanem zónákat építesz régiók szerint, és az utánvétet az azokban a zónákban lévő módokhoz kötöd. Körülményesnek hangzik, de stabil, nem függ semmilyen bővítménytől, és túléli a frissítéseket. Győződj meg róla, hogy a pénztárad valóban bekéri az állam/régió mezőt a Beállítások > Általános (Settings > General) alatt, különben nincs mit olvasnia a szűrőnek.
1. módszer (kód nélkül): szállítási zónák + „Engedélyezés szállítási módokhoz"
A legtisztább megközelítés, akkor ajánlott, ha inkább nem nyúlnál a kódhoz.
- Menj a WooCommerce > Beállítások > Szállítás > Szállítási zónák (WooCommerce > Settings > Shipping > Shipping Zones) menüpontba.
- Hozz létre egy „Utánvét engedélyezve" nevű zónát, és add hozzá csak azokat a régiókat, ahol elfogadsz utánvétet. A WooCommerce lehetővé teszi egyedi államok/régiók hozzáadását egy zónához.
- Ebben a zónában add hozzá azt a szállítási módot, amelyre az utánvétet rá akarod ültetni (pl. „Futárszolgálati kézbesítés").
- Hozz létre egy második zónát (vagy használd a „Nem lefedett helyek" opciót) az ország többi részére, ugyanazokkal a szállítási módokkal, de ott le fogod tiltani az utánvétet.
- Menj a WooCommerce > Beállítások > Fizetések > Utánvét > „Engedélyezés szállítási módokhoz" (WooCommerce > Settings > Payments > Cash on delivery > „Enable for shipping methods") menüpontba, és válaszd ki KIZÁRÓLAG az „Utánvét engedélyezve" zónából származó módot.
Eredmény: egy engedélyezett régióban lévő vásárló látja az utánvétet, egy azon kívüli nem. Nincs kód, nincs bővítmény.
2. módszer (kóddal): kódrészlet, amely régió szerint szűr
Ha a zónák túl bonyolulttá tennék a szállításodat (már vannak zónánkénti díjaid, és nem akarod megkettőzni őket), közvetlenül elrejtheted az utánvétet a cím régiója alapján. Tedd a kódrészletet a gyerektémád functions.php fájljába vagy egy kódrészlet-bővítménybe (Code Snippets):
```php
add_filter( 'woocommerce_available_payment_gateways', 'mpo_cod_by_region' );
function mpo_cod_by_region( $gateways ) {
if ( is_admin() && ! wp_doing_ajax() ) {
return $gateways;
}
// Regions where you ACCEPT COD (WooCommerce state codes)
$allowed = array( 'CJ', 'TM', 'IF', 'B' );
$state = WC()->customer ? WC()->customer->get_shipping_state() : '';
if ( ! in_array( $state, $allowed, true ) && isset( $gateways['cod'] ) ) {
unset( $gateways['cod'] );
}
return $gateways;
}
```
A kódok a WooCommerce állam-kódjai a te országodhoz. Szerkeszd a listát, és kész is vagy. A logika megfordításához (utánvét mindenhol, KIVÉVE néhány régiót) tedd a letiltott régiókat a tömbbe, és fordítsd meg az in_array feltételt.
Tesztelés és gyakori buktatók
Mielőtt ünnepelnél, ellenőrizd:
- Tesztelj valódi címekkel különböző régiókból. Tegyél egy terméket a kosárba, menj a pénztárhoz, és változtasd meg a szállítási régiót — a fizetési módok AJAX-on keresztül frissülnek, tehát élőben látnod kell, ahogy az utánvét megjelenik és eltűnik.
- Figyelj a számlázási és a szállítási régióra. A fenti kódrészlet a szállítási régiót (shipping_state) olvassa. Ha az üzleted csak a számlázási címet használja, válts a get_billing_state() függvényre.
- A gyorsítótár félrevezethet. Ha gyorsítótár-bővítményt vagy CDN-t használsz, ürítsd ki a módosítások után, különben a régi pénztárat fogod látni.
- Ne feledkezz meg az utánvét díjáról. A régió-korlátozás azt dönti el, ki fizethet készpénzzel, de az utánvét felár hozzáadása külön beállítás (egy díj a fizetési módon, vagy egy woocommerce_cart_calculate_fees kódrészleten keresztül).
Mindig tesztelj egy staging környezetben, mielőtt élesítenél, különösen ha a functions.php fájlhoz nyúlsz.
Mikor éri meg segítséget kérni (és hogyan dolgozunk)
Ha egyetlen egyszerű szabályod van — néhány régió utánvéttel, a többiben online fizetés —, a fenti módszerekkel percek alatt megcsinálhatod magad. A segítség akkor térül meg, amikor a logika összekuszálódik: utánvét csak egy bizonyos rendelési érték felett, egy másik szabály termékkategóriánként, plusz zónánként változó utánvét díj. Itt egy feltételes fizetési bővítmény vagy egyedi kód órákat spórol, és megelőzi az egymással ütköző szabályokból eredő elveszett rendeléseket.
Az MPO Web Studio-nál távolról építünk és tartunk karban WooCommerce üzleteket, országos ügyfeleknek. Helyesen be tudjuk állítani a zónáidat, a régió-alapú utánvétet és a díjakat, vagy egy demón megmutatjuk, hogyan nézne ki, mielőtt bármit is fizetnél. Ha kell egy kéz, írj nekünk WhatsApp-on, és őszintén megmondjuk, hogy ez egy 10 perces házilagos feladat, vagy valóban megéri egy rendes megoldás.
Gyakran ismételt kérdések
Elfogadhatok utánvétet mindenhol, néhány régió kivételével?+
Igen. A kódrészlettel egyszerűbb: tedd a LETILTOTT régiókat a tömbbe, és fordítsd meg a feltételt — ha a vásárló régiója a listában van, távolítsd el a cod átjárót. A zónákkal fordítva jársz el: tedd a kivételeket egy külön zónába, amelyben nincs utánvéthez kötött szállítási mód.
Milyen régiókódokat használ a WooCommerce?+
Országonként rövid kódokat. A WooCommerce-ben minden államnak/régiónak van egy kódja, amelyet megtalálsz az ország states fájljában, vagy a pénztárnál lévő régió legördülő menü értékének megvizsgálásával. Pontosan azokat a kódokat használd az engedélyezett listádban, különben az egyezés nem sikerül.
A szűrő a számlázási vagy a szállítási címet olvassa?+
Amelyiket kiválasztod. A kódrészletben a get_shipping_state() a szállítási címet, a get_billing_state() a számlázásit használja. Utánvét esetén a szállítási cím logikus, mivel oda megy a csomag. Válassz aszerint, hogy milyen mezőket kérsz be a pénztárnál.
Szükségem van bővítményre?+
Egyszerű esetekben nem. A szállítási zónák módszer teljesen natív a WooCommerce-ben, a kódrészlethez pedig csak a functions.php fájlhoz vagy egy ingyenes kódrészlet-bővítményhez kell hozzáférés. Egy dedikált feltételes fizetési bővítmény csak akkor éri meg, ha szabályokat kombinálsz (érték + kategória + régió).
Miért nem jelenik meg egyáltalán az utánvét, pedig mindent beállítottam?+
A leggyakrabban: a pénztár gyorsítótárát nem ürítetted ki, a vásárló régiója nem egyezik pontosan a listádban lévő kóddal, vagy az állam/régió mező le van tiltva a Beállításokban. Ürítsd ki a gyorsítótárat, és tesztelj a pénztárnál, a régiót változtatva, hogy megerősítsd, a fizetési módok frissülnek.
7 hiba, amely elriasztja az ügyfeleket a weboldaláról
Adja meg az e-mail-címét, és azonnal itt megkapja az útmutatót. Spam nélkül.
Szeretné látni, hogyan nézne ki a cége weboldala?
Írjon nekünk WhatsAppon, és ingyen elkészítünk egy bemutató weboldalt a cége nevével. Előbb megnézi, utána dönt — minden kötelezettség nélkül.