Wordpress

Woocommerce Sepet Tutarına Göre Hediye Ürün Kampanyası

Woocommerce Sepet Tutarına Göre Hediye Ürün Kampanyası

Merhaba Değerli Okuyucular,
Bu yazıda, WooCommerce alışveriş sitenizin müşterilerine sepet tutarlarına göre nasıl hediye ürün sunabileceğinizi anlatacağım. Sepet tutarına göre hediye ürünler sunma konsepti, müşterilerin alışveriş deneyimini daha cazip ve tatmin edici hale getirebilen bir kampanya örneğidir. Bu yöntem, müşteri sadakatini artırabilir ve satışları teşvik edebilir. Keyifli okumalar dilerim!

Woocommerce Free Gift on Cart
sepet tutarına göre hediye ürün
www.bahsbar.com/cart sitesinden bir örnek

WooCommerce Sepet Tutarına Göre Hediye Ürün Kampanyasını sitenize eklemek için aşağıdaki adımları izleyebilirsiniz:
1. Görünüm > Tema Düzenleyici bölümüne gidin.
2. functions.php dosyasını seçin.
3. Dosyanın en altına aşağıdaki kodları sırasıyla ekleyin.
veya alt tema oluşturarak tema güncellemelerinde kodlarınızı kaybolmadan saklayabilirsiniz. Alt tema oluşturmak için buraya tıklayabilirsiniz.

Adım 1: Hediye verilecek ürünlerin ayarları

Hediye verilecek ürünlerin, varyasyonlu ürünlerden ziyade basit ürünler olarak seçilmesine özen gösterin. Bu işlem, basit ürünlerin üzerinden yürütülmüştür çünkü varyasyonlar daha karmaşık bir yapı gerektirebilir. Hediye ürünlerin ayarlarını aşağıdaki şekilde düzenlemeniz önemlidir:

Woocommerce Product Settings

Adım 2: İlerleme çubuğu widget


Önemli not: Hediye ürün kampanyası oluştururken dikkat etmeniz gereken bir husus, sepet limitleri ve belirlediğiniz ürün ID’lerinin sayılarının mutlaka eşleşmesidir. Bu uyumlu yapı, kampanyanın düzgün çalışması ve müşterilere hatasız bir deneyim sunabilmesi için oldukça önemlidir. Bu sebeple, seçtiğiniz ürünlerin sayısı ile belirlediğiniz sepet limitlerini dikkatli bir şekilde eşleştirmeniz, kampanyanızın istediğiniz şekilde sonuçlanmasını sağlayacaktır. Unutmayın, her aşamada tutarlılık ve doğru eşleşme hedeflenen sonuca ulaşmanızı kolaylaştıracaktır.

<?php
// Sepet sayfasında hediye bar gösterimi
add_action('woocommerce_before_cart_table', 'vono_cart_gift_calculate_show', 10);
function vono_cart_gift_calculate_show()
{
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    global $woocommerce;

    if (!$woocommerce->cart->is_empty()) {

        $getCartTotal = $woocommerce->cart->cart_contents_total;
        $giftLimiters = array(
            'limiters' => array(
                400  => "1. Hediyeni Al!", // 1. limit 
                800  => "2. Hediyeni Al!!", // 2. limit
                1500 => "3. Hediyeni Al!!!" // 3. limit
            ),
            'products' => array(
                // Hediye verilecek ürün ID'leri
                12766, 12767, 15662
            )
        );
        update_option('vono_gift_products', $giftLimiters); //$giftLimiters değişkenindeki bilgileri kullanmak üzere veritabanına kaydediyoruz.

        $remainingAmount = "Bütün Hediyeleri Kazandınız. Tebrikler!";
        foreach ($giftLimiters['limiters'] as $limit => $message) {
            if ($limit > $getCartTotal) {
                $remainingAmount = wc_price($limit - $getCartTotal) . " harca ve " . $message;
                break;
            }
        }

        $limiterKeys = array_keys($giftLimiters['limiters']);
        $fullWidth = reset($limiterKeys) + end($limiterKeys);
        $limitersShow = '';

        foreach ($limiterKeys as $widthValueKey => $giftLimiter) {
            $widthValue = number_format(($giftLimiter / $fullWidth) * 100, 1);
            $limitersShow .= sprintf('<div class="limiter" style="left: %s%%">%s. ürün</div>', $widthValue, $widthValueKey + 1);
        }

        $percent = min(100, (number_format(((floatval($getCartTotal) / ($fullWidth)) * 100), 0)));
?>
        <!-- Bu özelleştirmeyi ana temanızın veya çocuk temanızın (alt tema) içinde bulunan style.css dosyasına yazılmakta fayda var -->
        <style>
            .giftcontainer {
                width: 80%;
                position: relative;
                margin: 50px auto;
            }

            .skillcontainer {
                width: 100%;
                border: 2px solid black;
                border-radius: 10px;
                overflow: hidden;
            }

            .skills {
                text-align: right;
                padding-top: 5px;
                padding-bottom: 5px;
                color: white;
                background-color: #000;
                -webkit-animation: width_change 0.9s alternate;
                animation: width_change 0.9s alternate;

            }

            @keyframes width_change {
                0% {
                    width: 0;
                }
            }

            .limiter {
                position: absolute;
                top: 50%;
                width: 70px;
                height: 70px;
                line-height: 70px;
                border-radius: 50%;
                text-align: center;
                border: 2px solid black;
                background: #fff;
                transform: translate(-50%, -50%);
            }

            .remaining-amount {
                text-align: center;
            }
        </style>

        <div class="giftcontainer">
            <?= $limitersShow ?>

            <div class="skillcontainer">
                <div class="skills" style="width: <?= $percent ?>%;"></div>
            </div>
        </div>
        <div class="remaining-amount"><?= $remainingAmount ?></div>
        <br>
<?php
    }
}

Adım 3: Hediye Ürünleri Sepete Ekleme

Hediye ürün gösterge başarıyla oluşturduktan sonra bu adım, kampanyanızın etkili bir şekilde çalışmasını ve müşterilerin hediye ürünlerinden faydalanabilmesini sağlayacaktır.

add_action('woocommerce_after_calculate_totals', 'add_free_product_to_cart', 999);
function add_free_product_to_cart($cart)
{
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    // Hediye ürünlerin listesini $freeProductIds değişkenine dizi olarak aktar
    $vonoGiftProduct = get_option('vono_gift_products');
    $freedProductIds = $vonoGiftProduct['products'];
    sort($freedProductIds);

    $freeLimit = array_keys($vonoGiftProduct['limiters']);
    $freeLimitList = array_combine($freedProductIds, $freeLimit);
    $hasShippable = array_fill_keys($freedProductIds, false);
    $freeKey = array_fill_keys($freedProductIds, false);
    $freeQuantity = array_fill_keys($freedProductIds, 0);

    $cart_subtotal   = 0;
    $co = 0;

    // Sepet öğe döngüsü
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product_id = $cart_item['product_id'];
        if (in_array($product_id, $freedProductIds)) {
            $freeKey[$product_id] = $cart_item_key;
            $freeQuantity[$product_id] = $cart_item['quantity'];
            $cart_item['data']->set_price(0); // Ücretsiz ürün fiyatını sıfıra ayarla
        }

        if ($cart_item['data']->is_virtual() !== true) {
            $hasShippable[$freedProductIds[$co++]] = true;
        }

        //  Ürünlerin ara toplamını hesaplama
        // Eğer vergilerle birlikte hesaplanmasını istiyorsanız  ( + $cart_item['line_tax']  ) bu kodu ekleyebilirsiniz.
        $cart_subtotal += $cart_item['line_total'];
    }

    // Hediye ürünler döngüsü
    foreach ($freedProductIds as $freedProductId) {
        //Koşul sağlanmışsa hediye ürünü sepete ekle
        if ($cart_subtotal >= $freeLimitList[$freedProductId] && $hasShippable[$freedProductId] && $freeKey[$freedProductId] === false) {
            $cart->add_to_cart($freedProductId, 1);
        }
        // koşul sağlanmamışsa hediye ürünü kaldır
        elseif (($cart_subtotal < $freeLimitList[$freedProductId]) && $freeKey[$freedProductId] !== false) {
            $cart->remove_cart_item($freeKey[$freedProductId]);
        }
        // Hediye ürün miktarını 1'e ayarlama
        elseif ($freeKey[$freedProductId] !== false && $freeQuantity[$freedProductId] > 1) {
            $cart->set_quantity($freeKey[$freedProductId], 1);
        }
    }
}

Adım 4: Opsiyonel tercihler

Aşağıdaki kodlar, Sepet Tutarına Göre Hediye Ürün Kampanyası için özelleştirme fonksiyonlarını içermektedir. Bu fonksiyonlar, isteğe bağlı olarak kullanabileceğiniz ve size esneklik sağlayabileceğiniz seçenekler sunmaktadır. Yani, ihtiyacınıza göre bu fonksiyonları tercihinize bağlı olarak kullanabilirsiniz. Bu sayede kampanyanızı daha da kişiselleştirebilir ve müşterilerinize daha cazip bir alışveriş deneyimi sunabilirsiniz.

Mini sepet üzerinde hediye ürünler

// opsiyonel:  Minisepet Üzerinde Ücretsiz Ürün Fiyatlarını Sıfırlama
add_filter('woocommerce_cart_item_price', 'change_minicart_free_gifted_item_price', 10, 3);
function change_minicart_free_gifted_item_price($price_html, $cart_item, $cart_item_key)
{
    // Hediye ürünlerin listesini $freeProductIds değişkenine dizi olarak aktar
    $vonoGiftProduct = get_option('vono_gift_products');
    $freeProductIds = $vonoGiftProduct['products'];

    if (in_array($cart_item['product_id'], $freeProductIds)) {
        return wc_price(0);
    }

    return $price_html;
}

Sepette bulunan ürün miktarını belirleme alanını kaldırma

// Opsiyonel:  Sepetten ürün miktar alanlarını kaldırır
add_filter('woocommerce_cart_item_quantity', 'remove_specific_product_quantity_fields', 10, 3);
function remove_specific_product_quantity_fields($product_quantity, $cart_item_key, $cart_item)
{
    // Hediye ürünlerin listesini $freeProductIds değişkenine dizi olarak aktar
    $vonoGiftProduct = get_option('vono_gift_products');
    $freeProductIds = $vonoGiftProduct['products'];

    if (in_array($cart_item['product_id'], $freeProductIds)) {
        return '';
    }

    return $product_quantity;
}

Sepetteki ürün kaldırma butonunu sepetten kaldırır

//Opsiyonel: Sepetteki ürünlerin Kaldırma butonunu Devre Dışı Bırakma
add_filter('woocommerce_cart_item_remove_link', 'customized_cart_item_remove_link', 20, 2);
function customized_cart_item_remove_link($button_link, $cart_item_key)
{
    // Hediye ürünlerin listesini $freeProductIds değişkenine dizi olarak aktar
    $vonoGiftProduct = get_option('vono_gift_products');
    $freeProductIds = $vonoGiftProduct['products'];

    // Sepet öğesini $cart_item değişkenine aktar
    $cart_item = WC()->cart->get_cart()[$cart_item_key];

    // Eğer hedeflenen ürün sepetteyse, düğme bağlantısını kaldır
    if (in_array($cart_item['data']->get_id(), $freeProductIds)) {
        $button_link = '';
    }

    return $button_link;
}

Hediye verilecek ürünlerin yanına ekstra yazı Eklemek

// Opsiyonel: Hediye ürünlerin yanına ekstra metin yazmayı sağlar.
add_filter('woocommerce_cart_item_name', 'custom_specific_product_cart_item_name', 10, 3);
function custom_specific_product_cart_item_name($item_name, $cart_item, $cart_item_key)
{
    // Hediye ürünlerin listesini $freeProductIds değişkenine dizi olarak aktar
    $vonoGiftProduct = get_option('vono_gift_products');
    $freeProductIds = $vonoGiftProduct['products'];

    if (in_array($cart_item['product_id'], $freeProductIds)) {
        $extra_text = ' (Hediye Ürün)';
        $item_name .= $extra_text;
    }

    return $item_name;
}

Bkz: https://stackoverflow.com/a/66055144/12118468

Sevgili Okuyucularımız, Sizlere bilgi, eğlence ve ilham dolu içerikler sunabildiysek ne mutlu bize. Eğer yazımızda herhangi bir düzeltme veya öneri sunmak isterseniz, lütfen yorum yapmaktan çekinmeyin. Sizden gelen geri bildirimler, içeriklerimizi daha da geliştirmemiz için bize büyük bir yardımcı olacaktır. Teşekkür ederiz!
Unutmayın! Paylaşmak; kazanmanın en hızlı ve kolay yoludur. Bir sonraki makalede görüşmek dileğiyle esen kalın.

İçeriğimi beğendin mi? Bana destek olup bir kahve ısmarlayabilirsiniz. Çok teşekkür ederim!

Bu makale yardımcı oldu mu?
EvetHayır

Paylaş

2 yorum

  1. Hocam selamlar. Bunu sadece, sepet tutarı 1000tl ve üzeri olduğunda 2129 idli ürünün sepete eklenmesi olacak şekilde nasıl yapabiliriz. İlerleme çubuğu widget vs. olmadan yani. Sadece sepet tutarı 1000tl ve üzerinde ise 2129 idli ürün (katalogda ürün gizli ve fiyatı 0) sepete eklensin istiyorum. Yardımcı olursanız çok sevinirim.

    1. merhaba dostum ilerleme durumunu gördüğün yerden kaldırabilirsin. İlerleme çubuğunu kaldırma işleme herhangi zarar vermeyecektir. diğer söylediklerin hepsi kodda mevcut zaten seni söylediklerinden farklı olarak 3 farklı tutarda 3 farklı ürün eklemesi. İyi çalışmalar dilerim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir