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ó.




