Fizetési módok szűrése a kosárban lévő elemek készlete szerint
Ha azt szeretnéd, hogy az olyan termékeknél, amelyek nincsenek ugyan készleten, de rendelhetőek, a checkout során ne jelenjen meg az utánvét, mint fizetési mód, akkor ez a snippet neked szól.
Csapjunk is a lecsóba, kezdjünk azzal, hogy létrehozunk az mu-plugins mappában egy fájlt disable-cod-if-product-in-cart-is-not-in-stock.php
néven, az alábbi tartalommal:
Két függvényünk van:
- Az első (
check_products_in_cart_if_in_stock()
) végzi el a vásárló kosarának ellenőrzését: végigmegy minden terméken, megvizsgálja mindegyiket, hogy van-e az adott termékkel kapcsolatban készletkezelés, és ha van, akkor megnézi, hogy van-e még raktáron az adott termékből - ha nincs, akkor a feltételvizsgálat igazra értékelődik ki, egyúttal átállítjuk a visszatérési értéket hamisra, és azonnal meg is szakítjuk a kosár vizsgálatát, hiszen elég, ha csak egy nincs raktáron. - A másodikat (
disable_cod_if_product_is_out_of_stock($available_gateways)
) kötjük hozzá awoocommerce_available_payment_gateways
hook-hoz - ez annyit tesz, hogy megnézi, milyen értékű az első függvény ellentettje, és be van-e állítva az utánvét rendelési módnak. Ha igen, akkor kiveszi az elérhető módok közül, majd visszaadja ezt a tömböt a WooCommerce-nek a további munkához.
Ha másik fizetési módot szeretnél szűrni, akkor csak cseréld a fenti, második függvényben a cod
-ot a kivenni szándékozott fizetési mód handle-jére.
Megjegyzés: a függvények szignatúráját követő : array
és : bool
egy-egy hint arra vonatkozóan, hogy milyen típusú értékkel fog visszatérni az adott függvény. Ezt használva az olyan IDE-k, mint pl. a PhpStorm, menő leírást tudnak generálni hozzá, mint amit ebben a snippetben is látsz.
Kis Krisztiánnak ezúton is köszönöm a témát!