Többször is felmerült már a kérdés, hogy miként is lehetne megoldani WooCommerce esetén, hogyha megadott terméket a kosárba helyez a vásárló, akkor automatikusan kerüljön mellé egy másik ajándék (ingyenes) termék is. Szerencsére létezik erre egy nagyon egyszerű megoldás, méghozzá egy kódrészlet formájában. Ráadásul nem csak előre beállított termékek esetén kerülhet a kosárba az ajándék termék, hanem akkor is, ha egy általunk megszabott kategória bármely termékéből vásárol a megrendelő. Nézzük a megvalósítást!
Először is másoljuk a következő kódrészletet a sablonunk functions.php fájljának végére:
function ajandek_termek_a_kosarba( $passed, $product_id, $quantity ) { global $woocommerce; /* Ide kerülnek azon termékek azonosítói (SKU) amik mellé szeretnénk, hogy hozzáadásra kerüljön az ajándék */ $termekekajandekkal = array('termek-1', 'termek-2','termek-3'); /* Ide kerül az ajándék termék azonosítója (SKU) */ $ajandektermek = 'ajandek'; /* Ide kerül a kupon azonosítója, amelyik 100% kedvezményt biztosít az ajándék termékhez */ $coupon_code = 'kedvezmeny'; $product = wc_get_product( $product_id ); if ( $product->get_sku() && in_array( $product->get_sku(), $termekekajandekkal ) ) { WC()->cart->add_to_cart( wc_get_product_id_by_sku( $ajandektermek ) ); wc_add_notice( __( 'Az ajándék terméket a kosárba helyeztük!', 'woocommerce' ), 'success' ); $woocommerce->cart->add_discount( $coupon_code ); } return $passed; } add_filter( 'woocommerce_add_to_cart_validation', 'ajandek_termek_a_kosarba', 10, 3 );
A kódot természetesen módosítanunk kell, méghozzá a következő módon:
$termekekajandekkal = array('termek-1', 'termek-2','termek-3');
Ide kerülnek vesszővel elválasztva azon termékek azonosítói (SKU), amelyek esetében szeretnénk, hogy hozzáadásra kerüljön az ajándékunk. Bármennyi termék hozzáadható (de akár lehet csak egy darab is).
$ajandektermek = 'ajandek';
Ide írjuk az általunk létrehozott (vagy egy már meglévő) termék azonosítóját (SKU), ez fog automatikusan a kosárba kerülni a fentebb megadott termékek mellé.
$coupon_code = 'kedvezmeny';
Ide pedig annak a kuponnak a neve kerül, amelyet létrehoztunk és ahol beállítottuk, hogy az ajándék termékre 100% kedvezményt biztosítson. Természetesen itt is szabad kezünk van, lehet a kedvezmény részleges is (például 50%) vagy megadott összeg (5.000 forint). Az ajándék termék tehát lehet meglévő webáruházi termék is, a kedvezmény pedig csak akkor fog rá vonatkozni, ha a fentebb megadott termékekből rendel valaki. A kupon létrehozásakor fontos ahhoz hozzárendelni az ajándék terméket, ha ez a lépés kimarad, akkor nem fogja tudni érvényesíteni a rendszer.
Ha szeretnénk a fenti kódba kategória figyelést is integrálni, akkor a következőképpen módosul a kód:
function ajandek_termek_a_kosarba( $passed, $product_id, $quantity ) { global $woocommerce; /* Ide kerülnek azon termékek azonosítói (SKU) amik mellé szeretnénk, hogy hozzáadásra kerüljön az ajándék */ $termekekajandekkal = array('termek-1', 'termek-2','termek-3'); /* Ide kerül az ajándék termék azonosítója (SKU) */ $ajandektermek = 'ajandek'; /* Ide kerül a kupon azonosítója, amelyik 100% kedvezményt biztosít az ajándék termékhez */ $coupon_code = 'kedvezmeny'; $product = wc_get_product( $product_id ); $category_slugs = wp_get_post_terms( $product_id, 'product_cat', array( 'fields' => 'slugs' ) ); if ( ( $product->get_sku() && in_array( $product->get_sku(), $termekekajandekkal ) ) || in_array( 'kategoria-neve', $category_slugs ) ) { WC()->cart->add_to_cart( wc_get_product_id_by_sku( $ajandektermek ) ); wc_add_notice( __( 'Az ajándék terméket a kosárba helyeztük!', 'woocommerce' ), 'success' ); $woocommerce->cart->add_discount( $coupon_code ); } return $passed; } add_filter( 'woocommerce_add_to_cart_validation', 'ajandek_termek_a_kosarba', 10, 3 );
Ilyenkor a következő sorban adhatjuk meg azon kategória nevét (slug), amely összes terméke mellé járni fog az ajándékunk:
in_array( 'kategoria-neve', $category_slugs )
Remélhetőleg mások számára is hasznos lesz a kód, mely kiindulópontnak is tökéletes. Szükség esetén könnyedén kiegészíthető vagy egyéni igények szerint tovább is módosítható.