WooCommerce ile çalışan mağazalarda sıkça ihtiyaç duyulan bir özellik:
Belirli bir tutar üzerindeki siparişlerde otomatik ücretsiz kargo uygulamak ve bunun kullanıcıya şık bir şekilde gösterilmesi.
Bu yazıda:
WooCommerce sepet tutarı 2000 TL ve üzerindeyse sadece “Kargo Bedava” seçeneğini aktif eden,
Altında ise sabit ücretli (örneğin 150 TL) kargo uygulayan,
“Free shipping” yazısını “Kargo Bedava” olarak değiştiren,
Ve kullanıcıya sadece bir kez bilgilendirme mesajı gösteren
tam fonksiyonel ve WooCommerce 9.5+ uyumlu bir PHP kod yapısı paylaşıyoruz.
🔧 Kullanım Senaryosu:
🛍️ Bir müşteriniz sepetine ürün eklediğinde:
Sepet 2000 TL altında ise:
✅ 150 TL sabit kargo uygulanır
✅ “Ücretsiz kargo için 2000 TL harcayın” mesajı sadece bir kez görünürSepet 2000 TL ve üzerindeyse:
✅ “Kargo Bedava” seçeneği tek başına gösterilir
✅ Bilgilendirme mesajı: “Sepetiniz 2000 TL üzeri olduğu için kargo bedava”
💻 Kod:
Aşağıdaki kodu temanızın functions.php
dosyasına eklemeniz yeterlidir:
/**
* @snippet WooCommerce 2000 TL Üzeri Kargo Bedava + Etiket Değişimi + Bilgilendirme @ WooCommerce 9.5+
* @author Furkan Sağlam
* @website https://www.furkansaglam.com
*/
// 1. Kargo kuralı ve "Kargo Bedava" etiketini uygulama
add_filter( 'woocommerce_package_rates', 'fks_customize_shipping_methods', 9999, 2 );
function fks_customize_shipping_methods( $rates, $package ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return $rates;
$free_shipping_limit = 2000;
$cart = WC()->cart;
if ( ! $cart ) return $rates;
$subtotal = $cart->get_subtotal();
$new_rates = [];
foreach ( $rates as $rate_key => $rate ) {
// Etiket değiştirme
if ( $rate->method_id === 'free_shipping' ) {
$rate->label = 'Kargo Bedava';
}
// 2000 TL ve üzerindeyse sadece ücretsiz kargo göster
if ( $subtotal >= $free_shipping_limit && $rate->method_id === 'free_shipping' ) {
$new_rates[ $rate_key ] = $rate;
}
// 2000 TL altındaysa sadece sabit oranlı kargo göster
if ( $subtotal < $free_shipping_limit && $rate->method_id === 'flat_rate' ) {
$new_rates[ $rate_key ] = $rate;
}
}
// Eğer uygun oran bulunamadıysa, orijinal oranları göster
return ! empty( $new_rates ) ? $new_rates : $rates;
}
// 2. Gönderim alanında bilgilendirme mesajı (sadece bir kez göster)
add_action( 'woocommerce_review_order_before_shipping', 'fks_shipping_notice_once', 5 );
add_action( 'woocommerce_cart_totals_before_shipping', 'fks_shipping_notice_once', 5 );
function fks_shipping_notice_once() {
if ( WC()->session && WC()->session->get( 'fks_shipping_notice_displayed' ) ) return;
if ( WC()->session ) {
WC()->session->set( 'fks_shipping_notice_displayed', true );
}
$limit = 2000;
$subtotal = WC()->cart ? WC()->cart->get_subtotal() : 0;
if ( $subtotal < $limit ) {
$remaining = wc_price( $limit - $subtotal );
echo '📦 Ücretsiz kargo için sadece ' . $remaining . ' daha harcayın!';
} else {
echo '✅ Sepetiniz 2000 TL ve üzeri olduğu için kargo bedava fırsatından yararlanıyorsunuz.';
}
}
📋 WooCommerce Panel Ayarları:
Kodu kullanmadan önce Gönderim Bölgeleri kısmını şu şekilde düzenleyin:
Ücretsiz Kargo (free_shipping)
Koşul: ❌ Olmamalı (temiz bırakılmalı)
Ücret: Otomatik olarak yok
Sabit Oranlı Kargo (flat_rate)
Koşul: ❌ Olmamalı
Ücret: 150 TL (örnek)
📌 İpuçları:
Bu yapı
woocommerce_package_rates
filtresini kullanarak tüm sistemin kargo mantığını kontrol eder.“Kargo Bedava” etiketi sabit olarak değiştirilir, gettext gibi çevirilere gerek kalmaz.
Bilgilendirme mesajı, sadece ilk gösterimde tetiklenir (session bazlı), sayfa yenilemelerinde tekrar gösterilmez.
Bu yapı, hem kullanıcı deneyimini hem de satış oranlarını artırmaya yönelik sade ve güçlü bir çözümdür.
Kodu dilediğiniz gibi özelleştirebilir, farklı eşikler (örneğin 500 TL) veya farklı mesajlar tanımlayabilirsiniz.
📌 Geliştirici notu: Kod WooCommerce 9.5 ve 9.9.4 sürümleriyle test edilmiştir. Cache eklentileri veya gönderim eklentileriyle birlikte kullanıyorsanız çakışma kontrolü yapmanız ö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.