Ajándék termék automatikusan a kosárba (WooCommerce)

[Ezt a cikket 4 perc elolvasni.]

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

Ha tetszik, mutasd meg másoknak is: