frissítve: 2022. 05. 15.
Olvasási idő: 3 perc
Plugout

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á a woocommerce_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!