WooCommerce mağaza promosyonları yürütüyorsanız bu küçük kod parçası size bu konuda yardımcı olacaktır. Mesela “ 2 ürün alana yarı indirim ” ya da “ 3 ürün alana en ucuzunu bedava ” kampanyası nasıl yürütülür?
Bu geçici çözümün ardındaki hile, sepette dolaşarak en ucuz ürünü bulmak ve ardından fiyatını normal fiyattan daha düşük olacak şekilde ayarlamaktır. Eğlence!

En ucuz ürüne %50 indirim uygulama:Woocommerce 8
PHP Snippet'i: WooCommerce Sepetinde En Ucuz Ürün Satış Fiyatını Belirleyin
Aşağıdaki kod, sepetteki en ucuz ürüne %50 indirim uygular (ayrıca BOGO 50 = Bir Alana Bir %50 İndirim denir).
Alt alandaki kodları Temanızın functions.php sayfasına eklemeniz gerekmektedir.
/**
* @snippet Sepette En ucuz ürüne %50 İndirim Uygulama @ WooCommerce Yönetim Ürünler Listesi
* @author Furkan Sağlam
* @compatible WooCommerce 8
*/
add_action( 'woocommerce_before_calculate_totals', 'fks_cheapest_cart_item_half_off', 9999 );
function fks_cheapest_cart_item_half_off( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
if ( count( $cart->get_cart() ) < 2 ) return; // AT LEAST 2 PRODUCTS IN THE CART
$min = PHP_FLOAT_MAX;
// LOOP THROUGH CART TO FIND CHEAPEST ITEM
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
if ( $cart_item['data']->get_price() <= $min ) {
$min = $cart_item['data']->get_price();
$cheapest = $cart_item_key;
}
}
// LOOP THROUGH CART TO REDUCE CHEAPEST ITEM PRICE BY 50%
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
if ( $cheapest == $cart_item_key ) {
$price = $cart_item['data']->get_price() / 2;
$cart_item['data']->set_price( $price );
$cart_item['data']->set_sale_price( $price );
}
}
}
Kod eklendikten sonra sepette en uygun fiyatlı ürününüze %50 İndirim uygulanmış olacaktır.

Görselde gördüğünüz gibi indirim uygulandı ama bunu müşteriye bildirmemiz ve göstermemiz de gerekmektedir. İndirim uygulanmadan önceki fiyatını da göstermemiz gerekiyor bu durumla ilgili kodlarıda alt alanda sizlerle paylaşıyorum.
add_filter( 'woocommerce_cart_item_price', 'fks_change_cart_table_price_display', 30, 3 );
function fks_change_cart_table_price_display( $price, $values, $cart_item_key ) {
$slashed_price = $values['data']->get_price_html();
$is_on_sale = $values['data']->is_on_sale();
if ( $is_on_sale ) {
$price = $slashed_price;
}
return $price;
}

Daha Gelişmiş Versiyon (WooCommerce 9.9.4 Uyumlu)
Aşağıda paylaşacağımız yeni sürüm, önceki temel örneğe göre çok daha gelişmiş bir yapıya sahiptir. WooCommerce 9.9.4 ile test edilmiş ve şu geliştirmeleri içermektedir:
🔧 Özellikler:
Sepetteki en ucuz üründen yalnızca 1 adet için %50 indirim uygulanır.
Ürün adeti 2 ve üzeri ise, sepet satırı otomatik olarak bölünür: 1 adet indirimli, kalanlar normal fiyatlı olacak şekilde yeniden eklenir.
İndirim uygulanan ürüne etiket eklenir: “%50 İndirim Uygulandı (Bu indirim sadece 1 ürün için geçerlidir.)”
Kod mantığı idempotent’tir; yani indirim bir kere uygulandıktan sonra tekrar çalışmaz.
İndirim doğrudan
get_regular_price()
üzerinden hesaplandığı için fiyat doğruluğu korunur.WooCommerce’in son sürümüyle tam uyumludur (9.9.4).
💡 Kullanım Senaryosu:
Bu sistem, örneğin “Sepette En Ucuz Ürüne %50 İndirim!” kampanyası gibi kampanyaları uygulamak isteyen mağazalar için idealdir. Sepetinde 3 ürün olan bir müşteri düşünün:
Ürün A: 500 TL
Ürün B: 250 TL
Ürün C: 100 TL
Bu sistem sayesinde yalnızca Ürün C’den 1 adet için 50 TL indirim uygulanır. Müşteri kampanyanın avantajını net bir şekilde görürken, mağazanız da kârlılığı korur.
🧩 Kodu İnceleyin:
Aşağıdaki kodları functions.php dosyanıza ekleyerek sistemi etkinleştirebilirsiniz:
/**
* @snippet En Ucuz Üründen Sadece 1 Adede %50 İndirim + Etiket + Koşullu Mantık @ WooCommerce 9.9.4
* @author Furkan Sağlam
*/
add_action( 'woocommerce_cart_loaded_from_session', 'fks_split_and_discount_one_cheapest_item', 30 );
function fks_split_and_discount_one_cheapest_item( $cart ) {
if ( is_admin() || did_action('fks_cart_already_split') ) return;
if ( $cart->is_empty() || count( $cart->get_cart() ) < 2 ) return;
// Eğer daha önce indirim uygulanmışsa bir daha yapma
foreach ( $cart->get_cart() as $item ) {
if ( isset( $item['_fks_discounted'] ) ) {
do_action('fks_cart_already_split');
return;
}
}
$cheapest_key = null;
$cheapest_price = PHP_FLOAT_MAX;
foreach ( $cart->get_cart() as $key => $item ) {
$price = $item['data']->get_price();
if ( $price < $cheapest_price ) {
$cheapest_price = $price;
$cheapest_key = $key;
}
}
if ( ! $cheapest_key ) return;
$item = $cart->get_cart_item( $cheapest_key );
if ( $item['quantity'] == 1 ) {
// Tek adet varsa direkt satırı değiştir (aynı satırda kalacak)
$cart->remove_cart_item( $cheapest_key );
$cart->add_to_cart(
$item['product_id'],
1,
$item['variation_id'],
$item['variation'],
array( '_fks_discounted' => true )
);
} elseif ( $item['quantity'] >= 2 ) {
// Satırı böl: 1 indirimli + geri kalanı normal
$product_id = $item['product_id'];
$variation_id = $item['variation_id'];
$variation = $item['variation'];
$remaining = $item['quantity'] - 1;
$cart->remove_cart_item( $cheapest_key );
$cart->add_to_cart( $product_id, 1, $variation_id, $variation, array(
'_fks_discounted' => true
));
if ( $remaining > 0 ) {
$cart->add_to_cart( $product_id, $remaining, $variation_id, $variation );
}
}
}
add_action( 'woocommerce_before_calculate_totals', 'fks_apply_discounted_price', 9999 );
function fks_apply_discounted_price( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
foreach ( $cart->get_cart() as $item ) {
if ( isset( $item['_fks_discounted'] ) && $item['_fks_discounted'] === true ) {
$product = $item['data'];
$regular_price = floatval( $product->get_regular_price() );
$discounted_price = wc_format_decimal( $regular_price * 0.5, wc_get_price_decimals() );
$product->set_price( $discounted_price );
}
}
}
add_filter( 'woocommerce_cart_item_name', 'fks_add_discount_label_to_item', 10, 3 );
function fks_add_discount_label_to_item( $name, $cart_item, $cart_item_key ) {
if ( isset( $cart_item['_fks_discounted'] ) && $cart_item['_fks_discounted'] === true ) {
$name .= '
%50 İndirim Uygulandı
(Bu indirim sadece 1 ürün için geçerlidir.)';
}
return $name;
}
✅ Geliştirici Notları:
woocommerce_cart_loaded_from_session
hook’u ile indirim mantığı yalnızca sepet yüklendiğinde tetiklenir._fks_discounted
meta değeri sayesinde indirimli ürünler işaretlenir ve tekrar indirim uygulanmaz.woocommerce_before_calculate_totals
ile ürün fiyatı sadece indirimli ürüne özel olarak %50 düşürülür.woocommerce_cart_item_name
filtresiyle görsel bir bilgilendirme sağlanır.
💬 Kodla ilgili desteğe mi ihtiyacınız var? Yorumlarda paylaşabilirsiniz. Geliştirici topluluğuyla birlikte daha işlevsel hale getirebiliriz.
👉 Not: Bu kodlar WooCommerce 9.9.4 sürümü ile test edilmiştir. Daha eski sürümlerde veya farklı temalarda kullanımda test edilmesi önerilir.
Bu makaleyi beğendiyseniz, lütfen WordPress video eğiticileri için YouTube Kanalımıza abone olun. Bizi Twitter ve Facebook’ta da bulabilirsiniz.