Selamlar,

Wordpress internet sitemde seçeceğim kategorilere özel ürün siparişi yapanların sepetlerine hediye olarak belirlediğim bir ürünü eklemek istiyorum.

Bunu nasıl yapabilirim?

Arkadaşlar, kodu DeepSeek'de yazdırdım. İhtiyacı olana da faydası olması için paylaşıyorum. Function.php dosyasına eklenecek kod:


Alıntı
add_action('woocommerce_before_cart', 'custom_add_gift_product');
function custom_add_gift_product() {
$gift_product_id = 17606; // Hediye ürününün ID'si

// Hediye ürününün ekleneceği kategorilerin slug'ları
$eligible_categories = array('kategori-slug-1', 'kategori-slug-2'); // Buraya istediğiniz kategori slug'larını ekleyin

$cart = WC()->cart->get_cart();
$eligible_products_in_cart = false;

// Sepetteki ürünleri kontrol et
foreach ($cart as $cart_item_key => $cart_item) {
$product_id = $cart_item['product_id'];
$product_categories = wp_get_post_terms($product_id, 'product_cat', array('fields' => 'slugs'));

// Eğer ürün belirli kategorilerden birine aitse
if (array_intersect($product_categories, $eligible_categories)) {
$eligible_products_in_cart = true;
break;
}
}

// Eğer sepette belirli kategorilerdeki ürünler varsa ve hediye ürünü sepette yoksa, hediye ürünü ekle
if ($eligible_products_in_cart && !WC()->cart->find_product_in_cart(WC()->cart->generate_cart_id($gift_product_id))) {
WC()->cart->add_to_cart($gift_product_id);
}
}

Açıklama:


  1. $eligible_categories: Bu diziye, hediye ürününün eklenmesini istediğiniz kategorilerin slug'larını (örneğin, 'elektronik', 'giyim') ekleyin.
  2. $eligible_products_in_cart: Bu değişken, sepette belirli kategorilerdeki ürünlerin olup olmadığını kontrol eder. Eğer sepette bu kategorilerden birine ait ürün varsa, true olur.
  3. foreach döngüsü: Sepetteki her bir ürünü kontrol eder. wp_get_post_terms fonksiyonu ile ürünün kategorilerini alır ve bu kategorilerin $eligible_categories dizisindeki kategorilerle kesişip kesişmediğini kontrol eder.
  4. if koşulu: Eğer sepette belirli kategorilerdeki ürünler varsa ve hediye ürünü sepette yoksa, hediye ürününü sepete ekler.