WP CLI ile WooCommerce Kargo Yöntemi Yapılandırması
E-ticaret sitelerinde kargo yönetimi, müşteri memnuniyetini doğrudan etkileyen kritik bir operasyonel süreçtir. WooCommerce kurulumlarında kargo ayarlarını elle yapmak zaman alır, hata riskini artırır ve özellikle çoklu site yönetiminde kabusa dönebilir. İşte tam bu noktada WP-CLI’nin wp wc shipping_method komutu hayat kurtarır. Bu yazıda, WP-CLI üzerinden WooCommerce kargo yöntemlerini nasıl yapılandıracağınızı, otomatize edeceğinizi ve yöneteceğinizi gerçek dünya senaryolarıyla ele alacağız.
WP-CLI ile WooCommerce Kargo Yönetimine Genel Bakış
WP-CLI, WordPress yönetimini komut satırından yapmanızı sağlayan güçlü bir araçtır. WooCommerce bu araca entegre olduğunda, mağaza yönetimi scriptlere dökülebilir, CI/CD pipeline’larına dahil edilebilir ve tekrarlanabilir hale gelir.
wp wc shipping_method komutu, WooCommerce’in kargo yöntemlerini (shipping methods) REST API üzerinden yönetmenizi sağlar. Komutun temel alt komutları şunlardır:
- list: Mevcut kargo yöntemlerini listeler
- get: Belirli bir kargo yönteminin detaylarını getirir
- create: Yeni kargo yöntemi ekler
- update: Var olan kargo yöntemini günceller
- delete: Kargo yöntemini siler
Başlamadan önce sisteminizde WP-CLI’nin kurulu olduğundan ve WooCommerce eklentisinin aktif olduğundan emin olun.
# WP-CLI versiyon kontrolü
wp --version
# WooCommerce'in aktif olup olmadığını kontrol et
wp plugin is-active woocommerce && echo "WooCommerce aktif" || echo "WooCommerce aktif değil"
# WooCommerce kargo komutlarını listele
wp wc shipping_method --help
Mevcut Kargo Yöntemlerini Listeleme
Sisteminizde hangi kargo yöntemlerinin tanımlı olduğunu görmek için list alt komutunu kullanırsınız. Bu komut hem zone bazlı kargo yöntemlerini hem de global ayarları sorgulamanıza olanak tanır.
# Tüm kargo yöntemlerini listele
wp wc shipping_method list --user=admin
# Belirli bir kargo zone'undaki yöntemleri listele
wp wc shipping_zone_method list --zone_id=1 --user=admin
# Çıktıyı JSON formatında al
wp wc shipping_method list --user=admin --format=json
# Sadece belirli alanları göster
wp wc shipping_method list --user=admin --fields=id,title,description,enabled
Burada dikkat edilmesi gereken önemli bir nokta: shipping_method komutu WooCommerce’de kayıtlı tüm kargo yöntemi tiplerimni listeler (flat_rate, free_shipping, local_pickup gibi). Bunlar zone’lara atanmış spesifik yöntemlerden farklıdır. Zone bazlı yöntemleri yönetmek için wp wc shipping_zone_method komutunu kullanmanız gerekir.
# Mevcut kargo zone'larını listele
wp wc shipping_zone list --user=admin
# Zone ID'si 2 olan zone'un metodlarını getir
wp wc shipping_zone_method list --zone_id=2 --user=admin --format=table
Kargo Zone’u Oluşturma ve Yapılandırma
Kargo yöntemlerini yapılandırmadan önce mutlaka bir kargo zone’u (bölgesi) oluşturmanız gerekir. Türkiye’deki bir e-ticaret sitesi için yaygın senaryo şudur: İstanbul içi teslimat, yurt içi teslimat ve yurt dışı teslimat olmak üzere üç ayrı zone oluşturmak.
# İstanbul içi kargo zone'u oluştur
wp wc shipping_zone create
--name="İstanbul İçi Teslimat"
--order=1
--user=admin
# Yurt içi kargo zone'u oluştur
wp wc shipping_zone create
--name="Yurt İçi Teslimat"
--order=2
--user=admin
# Oluşturulan zone'ların ID'lerini kontrol et
wp wc shipping_zone list --user=admin --format=table
Zone’ları oluşturduktan sonra her zone’a coğrafi lokasyon ekleyelim:
# İstanbul zone'una lokasyon ekle (zone_id=1 varsayılıyor)
wp wc shipping_zone_location add
--zone_id=1
--code="TR:34"
--type="state"
--user=admin
# Yurt içi zone'una Türkiye'yi ekle (zone_id=2)
wp wc shipping_zone_location add
--zone_id=2
--code="TR"
--type="country"
--user=admin
Kargo Yöntemi Ekleme: Flat Rate Yapılandırması
En yaygın kullanılan kargo yöntemi sabit ücretli (flat rate) kargodir. Bir zone’a flat rate kargo yöntemi eklemek ve yapılandırmak için şu adımları izleyin:
# Zone 1'e (İstanbul) flat rate yöntemi ekle
wp wc shipping_zone_method create
--zone_id=1
--method_id="flat_rate"
--user=admin
# Eklenen yöntemin instance_id'sini öğren
wp wc shipping_zone_method list --zone_id=1 --user=admin --format=json
# Flat rate yöntemini güncelle (instance_id=1 varsayılıyor)
wp wc shipping_zone_method update 1
--zone_id=1
--settings='{"title":{"value":"Standart Kargo"},"cost":{"value":"29.90"},"tax_status":{"value":"taxable"}}'
--user=admin
Burada settings parametresini JSON formatında geçiriyoruz. Her kargo yönteminin farklı ayarları olduğundan, önce mevcut ayarları sorgulamak iyi bir pratiktir:
# Flat rate yönteminin mevcut ayarlarını görüntüle
wp wc shipping_zone_method get 1
--zone_id=1
--user=admin
--format=json
Ücretsiz Kargo Yöntemi Yapılandırması
Minimum sepet tutarı gibi koşullara bağlı ücretsiz kargo seçeneği, Türkiye’deki e-ticaret sitelerinin vazgeçilmez bir özelliği haline geldi. Bunu WP-CLI üzerinden şöyle yapılandırabilirsiniz:
# Zone 2'ye (Yurt İçi) free shipping ekle
wp wc shipping_zone_method create
--zone_id=2
--method_id="free_shipping"
--user=admin
# Ücretsiz kargo için minimum tutar ayarla
# instance_id=2 varsayılıyor
wp wc shipping_zone_method update 2
--zone_id=2
--settings='{"title":{"value":"Ücretsiz Kargo"},"min_amount":{"value":"500"},"requires":{"value":"min_amount"}}'
--user=admin
requires parametresi için kullanılabilecek değerler şunlardır:
- “”: Koşulsuz ücretsiz kargo
- “min_amount”: Minimum sepet tutarı şartı
- “coupon”: Ücretsiz kargo kuponu şartı
- “min_amount_coupon”: Her iki şartın da sağlanması
Gerçek Dünya Senaryosu: Çoklu Kargo Yapılandırma Scripti
Diyelim ki yeni bir WooCommerce sitesi kuruyorsunuz ve tüm kargo yapısını sıfırdan otomatize etmek istiyorsunuz. Aşağıdaki bash scripti bunu gerçekleştirir:
#!/bin/bash
# wc_shipping_setup.sh
# WooCommerce kargo yapılandırma scripti
WP_PATH="/var/www/html/wordpress"
ADMIN_USER="admin"
echo "=== WooCommerce Kargo Yapılandırması Başlıyor ==="
# Mevcut zone'ları temizle (varsayılan zone 0 hariç)
echo "Mevcut zone'lar temizleniyor..."
EXISTING_ZONES=$(wp wc shipping_zone list --user=$ADMIN_USER --format=ids --path=$WP_PATH 2>/dev/null)
for zone_id in $EXISTING_ZONES; do
if [ "$zone_id" != "0" ]; then
wp wc shipping_zone delete $zone_id --user=$ADMIN_USER --path=$WP_PATH --force=true
echo "Zone $zone_id silindi."
fi
done
# İstanbul içi zone oluştur
echo "İstanbul zone'u oluşturuluyor..."
ISTANBUL_ZONE=$(wp wc shipping_zone create
--name="İstanbul İçi"
--order=1
--user=$ADMIN_USER
--path=$WP_PATH
--porcelain)
echo "İstanbul Zone ID: $ISTANBUL_ZONE"
# İstanbul zone'una lokasyon ekle
wp wc shipping_zone_location add
--zone_id=$ISTANBUL_ZONE
--code="TR:34"
--type="state"
--user=$ADMIN_USER
--path=$WP_PATH
# İstanbul'a flat rate ekle
ISTANBUL_METHOD=$(wp wc shipping_zone_method create
--zone_id=$ISTANBUL_ZONE
--method_id="flat_rate"
--user=$ADMIN_USER
--path=$WP_PATH
--porcelain)
wp wc shipping_zone_method update $ISTANBUL_METHOD
--zone_id=$ISTANBUL_ZONE
--settings='{"title":{"value":"İstanbul Standart Kargo"},"cost":{"value":"19.90"}}'
--user=$ADMIN_USER
--path=$WP_PATH
echo "İstanbul kargo yapılandırması tamamlandı."
# Yurt içi zone oluştur
echo "Yurt içi zone oluşturuluyor..."
YURTICI_ZONE=$(wp wc shipping_zone create
--name="Yurt İçi Teslimat"
--order=2
--user=$ADMIN_USER
--path=$WP_PATH
--porcelain)
wp wc shipping_zone_location add
--zone_id=$YURTICI_ZONE
--code="TR"
--type="country"
--user=$ADMIN_USER
--path=$WP_PATH
# Yurt içi flat rate
YURTICI_FLAT=$(wp wc shipping_zone_method create
--zone_id=$YURTICI_ZONE
--method_id="flat_rate"
--user=$ADMIN_USER
--path=$WP_PATH
--porcelain)
wp wc shipping_zone_method update $YURTICI_FLAT
--zone_id=$YURTICI_ZONE
--settings='{"title":{"value":"Standart Kargo"},"cost":{"value":"39.90"}}'
--user=$ADMIN_USER
--path=$WP_PATH
# Yurt içi free shipping (500 TL üzeri)
YURTICI_FREE=$(wp wc shipping_zone_method create
--zone_id=$YURTICI_ZONE
--method_id="free_shipping"
--user=$ADMIN_USER
--path=$WP_PATH
--porcelain)
wp wc shipping_zone_method update $YURTICI_FREE
--zone_id=$YURTICI_ZONE
--settings='{"title":{"value":"Ücretsiz Kargo (500 TL üzeri)"},"min_amount":{"value":"500"},"requires":{"value":"min_amount"}}'
--user=$ADMIN_USER
--path=$WP_PATH
echo "=== Kargo yapılandırması başarıyla tamamlandı! ==="
# Sonucu doğrula
wp wc shipping_zone list --user=$ADMIN_USER --path=$WP_PATH --format=table
Bu scripti çalıştırmak için:
chmod +x wc_shipping_setup.sh
./wc_shipping_setup.sh
Kargo Yöntemlerini Etkinleştirme ve Devre Dışı Bırakma
Sezonsal kampanyalar veya kargo şirketi kesintileri sırasında hızlıca müdahale etmeniz gerekebilir. WP-CLI ile bunu saniyeler içinde yapabilirsiniz:
# Belirli bir kargo yöntemini devre dışı bırak
wp wc shipping_zone_method update 3
--zone_id=2
--enabled=false
--user=admin
# Kargo yöntemini tekrar etkinleştir
wp wc shipping_zone_method update 3
--zone_id=2
--enabled=true
--user=admin
# Bir zone'daki tüm yöntemlerin durumunu kontrol et
wp wc shipping_zone_method list
--zone_id=2
--user=admin
--fields=instance_id,title,enabled
--format=table
Kargo Sınıflarını (Shipping Classes) Yönetme
Ağır veya hacimli ürünler için ek kargo ücreti almanız gerekiyorsa, kargo sınıflarını kullanabilirsiniz. WP-CLI ile kargo sınıfı yönetimi şu şekilde yapılır:
# Kargo sınıfı oluştur
wp wc product_shipping_class create
--name="Ağır Ürünler"
--slug="agir-urunler"
--description="10 kg üzeri ürünler için"
--user=admin
# Tüm kargo sınıflarını listele
wp wc product_shipping_class list --user=admin --format=table
# Belirli bir kargo sınıfını güncelle
wp wc product_shipping_class update 1
--name="Ağır Ürünler (Güncel)"
--user=admin
Kargo sınıfını flat rate yöntemine uygulamak için yöntem ayarlarını güncelleyin:
# Flat rate yönteminde kargo sınıfı fiyatı belirle
# class_cost_[shipping_class_id] formatında kullanılır
wp wc shipping_zone_method update 1
--zone_id=1
--settings='{"title":{"value":"Standart Kargo"},"cost":{"value":"29.90"},"class_cost_1":{"value":"59.90"}}'
--user=admin
Hata Ayıklama ve Sorun Giderme
WP-CLI ile kargo yapılandırması yaparken karşılaşılan yaygın sorunlar ve çözümleri:
# Debug modunda komut çalıştır
wp wc shipping_zone_method list --zone_id=1 --user=admin --debug
# WooCommerce kargo önbelleğini temizle
wp cache flush
wp wc update --user=admin
# Transient'ları temizle (kargo hesaplama önbelleği)
wp transient delete --all
# WooCommerce shipping zone cache'ini özellikle temizle
wp eval 'WC_Cache_Helper::get_transient_version("shipping", true);' --user=admin
Bir diğer yaygın sorun, --settings parametresinde JSON formatının bozulmasıdır. Özellikle Türkçe karakter içeren değerlerde bu sorunla karşılaşabilirsiniz. Çözüm olarak ayarları bir dosyadan okuyabilirsiniz:
# Ayarları dosyadan oku
cat > /tmp/shipping_settings.json << 'EOF'
{
"title": {"value": "Standart Kargo"},
"cost": {"value": "39.90"},
"tax_status": {"value": "taxable"}
}
EOF
# Dosyadan settings değerini oku ve kullan
SETTINGS=$(cat /tmp/shipping_settings.json)
wp wc shipping_zone_method update 1
--zone_id=1
--settings="$SETTINGS"
--user=admin
Toplu Güncelleme Senaryosu: Fiyat Artışı
Kargo şirketleri yılbaşında fiyatlarını artırdığında, tüm zone’lardaki kargo fiyatlarını tek tek güncellemek oldukça zahmetlidir. Aşağıdaki script bu süreci otomatize eder:
#!/bin/bash
# update_shipping_prices.sh
# Tüm flat rate kargo fiyatlarını belirli bir oranda artır
ARTIS_ORANI=1.20 # %20 artış
ADMIN="admin"
WP_PATH="/var/www/html/wordpress"
echo "Kargo fiyatları %20 artırılıyor..."
# Tüm zone'ları al
ZONES=$(wp wc shipping_zone list
--user=$ADMIN
--path=$WP_PATH
--format=ids)
for zone_id in $ZONES; do
echo "Zone $zone_id işleniyor..."
# Her zone'un metodlarını al
METHODS=$(wp wc shipping_zone_method list
--zone_id=$zone_id
--user=$ADMIN
--path=$WP_PATH
--format=json 2>/dev/null)
# JSON'u parse et ve flat_rate metodlarını güncelle
echo $METHODS | python3 -c "
import sys, json
methods = json.load(sys.stdin)
for method in methods:
if method.get('method_id') == 'flat_rate':
instance_id = method.get('instance_id')
settings = method.get('settings', {})
cost = settings.get('cost', {}).get('value', '0')
try:
new_cost = round(float(cost) * $ARTIS_ORANI, 2)
print(f'{instance_id}:{new_cost}')
except ValueError:
pass
" | while IFS=: read instance_id new_cost; do
wp wc shipping_zone_method update $instance_id
--zone_id=$zone_id
--settings="{"cost":{"value":"$new_cost"}}"
--user=$ADMIN
--path=$WP_PATH
echo " Instance $instance_id güncellendi: $new_cost TL"
done
done
echo "Kargo fiyat güncellemesi tamamlandı!"
Kargo Yapılandırmasını Yedekleme ve Geri Yükleme
Özellikle production ortamında değişiklik yapmadan önce mevcut yapılandırmayı yedeklemek kritik önem taşır:
#!/bin/bash
# backup_shipping_config.sh
# Kargo yapılandırmasını JSON dosyasına yedekle
BACKUP_DIR="/var/backups/woocommerce"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
ADMIN="admin"
mkdir -p $BACKUP_DIR
echo "Kargo yapılandırması yedekleniyor..."
# Zone listesini yedekle
wp wc shipping_zone list
--user=$ADMIN
--format=json > "$BACKUP_DIR/zones_$TIMESTAMP.json"
# Her zone'un metodlarını yedekle
ZONES=$(wp wc shipping_zone list --user=$ADMIN --format=ids)
declare -A ZONE_METHODS
for zone_id in $ZONES; do
wp wc shipping_zone_method list
--zone_id=$zone_id
--user=$ADMIN
--format=json > "$BACKUP_DIR/zone_${zone_id}_methods_$TIMESTAMP.json"
done
# Kargo sınıflarını yedekle
wp wc product_shipping_class list
--user=$ADMIN
--format=json > "$BACKUP_DIR/shipping_classes_$TIMESTAMP.json"
echo "Yedekleme tamamlandı: $BACKUP_DIR/"
ls -lh $BACKUP_DIR/*$TIMESTAMP*
WooCommerce Kargo Ayarları: Genel Parametreler
WP-CLI ile global WooCommerce kargo ayarlarını da yönetebilirsiniz. Bu ayarlar wp option komutu üzerinden erişilebilir:
# Kargo hesaplama modunu görüntüle
wp option get woocommerce_shipping_cost_requires_address
# Kargo hesaplamasını yalnızca adres girilince göster
wp option update woocommerce_shipping_cost_requires_address "yes"
# Varsayılan kargo destinasyonunu ayarla
wp option update woocommerce_default_customer_address "geolocation"
# Kargo debug modunu etkinleştir (geliştirme ortamı için)
wp option update woocommerce_shipping_debug_mode "yes"
# Kargo debug modunu kapat (production için)
wp option update woocommerce_shipping_debug_mode "no"
Sonuç
WP-CLI’nin wp wc shipping_method ve ilişkili komutları, WooCommerce kargo yönetimini tamamen farklı bir seviyeye taşır. Manuel admin paneli tıklamalarından kurtulup, scriptlenebilir ve tekrarlanabilir yapılandırmalara geçmek hem zaman kazandırır hem de insan hatasını minimuma indirir.
Bu yazıda ele aldığımız konuları özetlemek gerekirse:
- Zone oluşturma ve lokasyon tanımlama
- Flat rate ve ücretsiz kargo yöntemlerinin yapılandırması
- Kargo sınıflarının yönetimi
- Toplu fiyat güncelleme scriptleri
- Yedekleme ve geri yükleme pratikleri
- Hata ayıklama teknikleri
Gerçek production ortamlarında bu komutları kullanırken birkaç önemli noktayı aklınızda tutun: Her değişiklikten önce yedek alın, staging ortamında test edin ve özellikle JSON formatındaki --settings parametrelerine dikkat edin. Türkçe karakter içeren değerlerde encoding sorunları yaşıyorsanız, ayarları bir JSON dosyasından okumak en güvenilir yöntemdir.
WP-CLI ile kargo yönetimi konusunda daha ileri gitmek isteyenler için WooCommerce’in resmi REST API dokümantasyonunu ve wp wc --help çıktısını incelemenizi şiddetle tavsiye ederim. Her komutun desteklediği parametreler ve örnek kullanımlar orada oldukça detaylı açıklanmıştır.
