WP WC Coupon ile WooCommerce İndirim Kuponu Oluşturma ve Yönetimi
E-ticaret sitelerinde indirim kuponları, müşteri sadakatini artırmanın ve satışları canlandırmanın en etkili yollarından biri. Ama onlarca, yüzlerce kupon oluşturmanız gerektiğinde WordPress yönetim paneli üzerinden tek tek işlem yapmak hem zaman kaybı hem de sinir bozucu bir deneyime dönüşüyor. İşte bu noktada WP CLI devreye giriyor. Komut satırından saniyeler içinde toplu kupon oluşturabilir, mevcut kuponları güncelleyebilir ve tüm kampanya yönetimini otomatize edebilirsiniz.
Bu yazıda wp wc coupon komutunu tüm parametreleriyle ele alacağız. Gerçek dünya senaryoları üzerinden gideceğiz; Black Friday kampanyası, müşteriye özel kuponlar, toplu kupon oluşturma betikleri gibi konuları pratikte nasıl uygulayacağınızı göreceğiz.
WP CLI ile WooCommerce Kupon Yönetimine Giriş
WP CLI’nin WooCommerce entegrasyonu, wp wc komutu altında toplanır. Kupon işlemleri için wp wc coupon alt komutunu kullanıyoruz. Bu komut, WooCommerce’in REST API’sini arka planda kullanır. Bu yüzden komutları çalıştırırken --user parametresiyle yeterli yetkiye sahip bir kullanıcı belirtmeniz gerekiyor.
Önce kurulumunuzun hazır olduğunu kontrol edelim:
# WP CLI versiyonunu kontrol et
wp --version
# WooCommerce eklentisinin aktif olduğunu doğrula
wp plugin status woocommerce
# Mevcut kupon sayısını hızlıca görüntüle
wp wc coupon list --user=admin --format=count
Eğer wp wc coupon komutunu çalıştırdığınızda hata alıyorsanız, büyük ihtimalle WooCommerce eklentisi aktif değildir ya da WP CLI’nin WooCommerce paketini yüklemeniz gerekiyordur. Standart WooCommerce kurulumlarında bu komutlar kutudan çıkar çıkmaz çalışır.
Temel Kupon Oluşturma: wp wc coupon create
Bir kupon oluştururken en çok kullandığınız parametreler şunlar:
- –code: Kupon kodu (zorunlu)
- –discount_type: İndirim türü.
percent,fixed_cart,fixed_productdeğerlerini alır - –amount: İndirim miktarı veya yüzdesi
- –individual_use: Diğer kuponlarla birlikte kullanılıp kullanılamayacağı (true/false)
- –usage_limit: Toplam kullanım limiti
- –usage_limit_per_user: Kullanıcı başına kullanım limiti
- –date_expires: Son kullanma tarihi (YYYY-MM-DD formatında)
- –minimum_amount: Minimum sepet tutarı
- –maximum_amount: Maksimum sepet tutarı
- –free_shipping: Ücretsiz kargo aktifleştirme (true/false)
- –user: İşlemi yapan WP kullanıcısı (zorunlu)
Basit bir yüzde indirim kuponu oluşturalım:
# %20 indirim kuponu oluştur
wp wc coupon create
--code="YAZ2024"
--discount_type="percent"
--amount="20"
--usage_limit="100"
--date_expires="2024-08-31"
--user=admin
Bu komut başarılı olduğunda size kuponun ID’sini döner. O ID’yi not alın, sonraki işlemlerde işinize yarayacak.
Şimdi biraz daha karmaşık bir senaryo deneyelim. Sabit tutarlı, minimum sepet koşullu ve sadece belirli kategorilere uygulanacak bir kupon:
# 50 TL sabit indirim, minimum 300 TL sepet, tek kullanım
wp wc coupon create
--code="HOSGELDIN50"
--discount_type="fixed_cart"
--amount="50"
--minimum_amount="300"
--individual_use="true"
--usage_limit="1"
--usage_limit_per_user="1"
--date_expires="2024-12-31"
--description="Yeni üye karşılama kuponu"
--user=admin
--individual_use="true" parametresi önemli. Bu sayede müşteriler bu kuponu başka kuponlarla birleştirip ekstra avantaj elde edemez.
Mevcut Kuponları Listeleme ve Sorgulama
Sahada çalışırken en sık ihtiyaç duyduğunuz operasyonlardan biri mevcut kuponları listelemek ve belirli kriterlere göre filtrelemek:
# Tüm kuponları listele
wp wc coupon list --user=admin --format=table
# Sadece belirli alanları göster
wp wc coupon list
--user=admin
--fields=id,code,discount_type,amount,usage_count,date_expires
--format=table
# JSON formatında çıktı al (script işleme için)
wp wc coupon list --user=admin --format=json
# Belirli bir kuponu ID ile sorgula
wp wc coupon get 125 --user=admin --format=table
JSON formatı özellikle faydalı. Bash scriptlerinde jq ile birleştirdiğinizde kupon verilerini parse edip işleyebilirsiniz:
# Süresi dolmuş kuponları bul ve listele
wp wc coupon list --user=admin --format=json |
jq '.[] | select(.date_expires != null) | select(.date_expires.date < "'$(date +%Y-%m-%d)'")'
Kupon Güncelleme: wp wc coupon update
Mevcut bir kuponu güncellemek için update komutunu kullanıyorsunuz. İlk argüman kuponun ID’si:
# Kupon kullanım limitini artır
wp wc coupon update 125
--usage_limit="200"
--user=admin
# Kuponun son kullanma tarihini uzat
wp wc coupon update 125
--date_expires="2024-09-30"
--user=admin
# İndirim oranını değiştir
wp wc coupon update 125
--amount="25"
--user=admin
Gerçek dünyada çok karşılaştığım bir senaryo: Kampanya beklenenden iyi gittiğinde kullanım limitini artırmanız ya da son dakika uzatma yapmanız gerekiyor. Panele girip bulmak yerine tek satır komutla hallediyorsunuz.
Kupon kodunu da güncelleyebilirsiniz ama dikkatli olun; eğer kodu zaten paylaştıysanız ve müşteriler kullanıyorsa değiştirmek sorun yaratır:
# Kupon kodunu güncelle (dikkatli kullan!)
wp wc coupon update 125
--code="YAZ2024-YENI"
--user=admin
Kupon Silme: wp wc coupon delete
# Tekil kupon silme
wp wc coupon delete 125 --user=admin
# Silme işlemini zorla (çöp kutusuna göndermeden direkt sil)
wp wc coupon delete 125 --force=true --user=admin
Toplu silme için bir döngü kullanabilirsiniz:
# Belirli bir listeden kuponları sil
for id in 125 126 127 128; do
wp wc coupon delete $id --force=true --user=admin
echo "Kupon $id silindi"
done
Gerçek Dünya Senaryosu 1: Black Friday Kampanyası
Black Friday gibi büyük kampanyalarda genellikle birden fazla kupon kategorisi oluşturmanız gerekir. Farklı müşteri segmentlerine farklı indirimler, farklı ürün kategorilerine özel kuponlar. Bunu elle panel üzerinden yapmak saatler alır. Bir bash scripti ile dakikalar içinde halledelim:
#!/bin/bash
# black_friday_coupons.sh
# Black Friday 2024 kupon oluşturma scripti
WP_USER="admin"
EXPIRY="2024-11-30"
echo "Black Friday kuponları oluşturuluyor..."
# VIP müşteriler için %30 indirim
wp wc coupon create
--code="BF2024-VIP"
--discount_type="percent"
--amount="30"
--individual_use="true"
--usage_limit="500"
--usage_limit_per_user="1"
--minimum_amount="200"
--date_expires="$EXPIRY"
--description="Black Friday 2024 VIP kuponu"
--user=$WP_USER
echo "VIP kuponu oluşturuldu: BF2024-VIP"
# Genel müşteriler için %20 indirim
wp wc coupon create
--code="BF2024-GENEL"
--discount_type="percent"
--amount="20"
--individual_use="true"
--usage_limit="2000"
--usage_limit_per_user="1"
--minimum_amount="150"
--date_expires="$EXPIRY"
--description="Black Friday 2024 genel kupon"
--user=$WP_USER
echo "Genel kupon oluşturuldu: BF2024-GENEL"
# Ücretsiz kargo kuponu (minimum 100 TL sepet)
wp wc coupon create
--code="BF2024-KARGO"
--discount_type="fixed_cart"
--amount="0"
--free_shipping="true"
--usage_limit="5000"
--usage_limit_per_user="1"
--minimum_amount="100"
--date_expires="$EXPIRY"
--description="Black Friday 2024 ücretsiz kargo"
--user=$WP_USER
echo "Kargo kuponu oluşturuldu: BF2024-KARGO"
echo "Tüm Black Friday kuponları başarıyla oluşturuldu!"
Bu scripti çalıştırmadan önce chmod +x black_friday_coupons.sh ile çalıştırma izni verin, sonra ./black_friday_coupons.sh ile çalıştırın.
Gerçek Dünya Senaryosu 2: Kişiye Özel Benzersiz Kupon Üretimi
Büyük e-ticaret sitelerinde müşterilere kişisel doğum günü kuponu ya da sadakat ödülü göndermek yaygın bir pratik. Her müşteri için benzersiz bir kod üretip WooCommerce’e kaydetmeniz gerekiyor:
#!/bin/bash
# kisisel_kupon_olustur.sh
# Kullanım: ./kisisel_kupon_olustur.sh kullanici_email
EMAIL=$1
WP_USER="admin"
if [ -z "$EMAIL" ]; then
echo "Kullanım: $0 <email>"
exit 1
fi
# Benzersiz kupon kodu üret
RANDOM_SUFFIX=$(cat /dev/urandom | tr -dc 'A-Z0-9' | head -c 8)
KUPON_KODU="OZEL-${RANDOM_SUFFIX}"
# WooCommerce kullanıcı ID'sini bul
CUSTOMER_ID=$(wp wc customer list
--search="$EMAIL"
--user=$WP_USER
--format=json | jq -r '.[0].id')
if [ "$CUSTOMER_ID" == "null" ] || [ -z "$CUSTOMER_ID" ]; then
echo "Hata: $EMAIL adresiyle eşleşen müşteri bulunamadı"
exit 1
fi
# 30 gün sonraki tarihi hesapla
EXPIRY=$(date -d "+30 days" +%Y-%m-%d)
# Kuponu oluştur
COUPON_ID=$(wp wc coupon create
--code="$KUPON_KODU"
--discount_type="percent"
--amount="15"
--individual_use="true"
--usage_limit="1"
--usage_limit_per_user="1"
--email_restrictions="$EMAIL"
--date_expires="$EXPIRY"
--description="$EMAIL için kişisel indirim kuponu"
--user=$WP_USER
--porcelain)
echo "Kupon oluşturuldu!"
echo "Email: $EMAIL"
echo "Kupon Kodu: $KUPON_KODU"
echo "Kupon ID: $COUPON_ID"
echo "Geçerlilik: $EXPIRY"
Burada --email_restrictions parametresi kritik. Bu parametre sayesinde kupon sadece o müşteriye ait e-posta adresiyle kullanılabilir hale geliyor. Başkasının kullanımının önüne geçiyor.
--porcelain flag’i ise çok kullanışlı; komutun sadece oluşturulan kaydın ID’sini döndürmesini sağlıyor. Script içinde bu ID’yi yakalamak ve sonraki işlemlerde kullanmak için biçilmiş kaftan.
Toplu Kupon İçe Aktarma: CSV’den WooCommerce’e
Bir ajans ya da büyük operasyonda çalışıyorsanız çoğu zaman muhasebe ya da pazarlama ekibinden CSV formatında kupon listesi gelir. Bu CSV’yi WooCommerce’e aktarmak için güzel bir yöntem:
#!/bin/bash
# csv_kupon_aktar.sh
# CSV formatı: kod,tür,miktar,limit,son_tarih
CSV_DOSYA="kuponlar.csv"
WP_USER="admin"
HATA_SAYISI=0
BASARI_SAYISI=0
# CSV başlık satırını atla
tail -n +2 "$CSV_DOSYA" | while IFS=',' read -r KOD TUR MIKTAR LIMIT SON_TARIH; do
# Boş satırları atla
if [ -z "$KOD" ]; then
continue
fi
# Kuponu oluştur
SONUC=$(wp wc coupon create
--code="$KOD"
--discount_type="$TUR"
--amount="$MIKTAR"
--usage_limit="$LIMIT"
--date_expires="$SON_TARIH"
--user=$WP_USER
--porcelain 2>&1)
# Sonucu kontrol et
if [[ "$SONUC" =~ ^[0-9]+$ ]]; then
echo "OK: $KOD (ID: $SONUC)"
BASARI_SAYISI=$((BASARI_SAYISI + 1))
else
echo "HATA: $KOD - $SONUC"
HATA_SAYISI=$((HATA_SAYISI + 1))
fi
done
echo ""
echo "İşlem tamamlandı."
echo "Başarılı: $BASARI_SAYISI"
echo "Hata: $HATA_SAYISI"
kuponlar.csv dosyanız şöyle görünmeli:
kod,tur,miktar,limit,son_tarih
MART10,percent,10,500,2024-03-31
MART20,percent,20,200,2024-03-31
SABIT30,fixed_cart,30,100,2024-03-31
Süresi Dolmuş Kuponları Temizleme
Zamanla sitenizde onlarca, yüzlerce eski kupon birikebilir. Bu hem veritabanını şişirir hem de yönetimi zorlaştırır. Düzenli temizlik için:
#!/bin/bash
# eski_kuponlari_temizle.sh
# Süresi dolmuş tüm kuponları siler
WP_USER="admin"
BUGUN=$(date +%Y-%m-%d)
echo "Süresi dolmuş kuponlar temizleniyor..."
# Tüm kuponları JSON olarak al
KUPONLAR=$(wp wc coupon list
--user=$WP_USER
--format=json
--fields=id,code,date_expires)
# Süresi dolmuş kuponları bul ve sil
echo "$KUPONLAR" | jq -r '.[] |
select(.date_expires != null) |
select(.date_expires.date[:10] < "'$BUGUN'") |
"(.id) (.code)"' |
while read -r ID CODE; do
wp wc coupon delete $ID --force=true --user=$WP_USER
echo "Silindi: $CODE (ID: $ID)"
done
echo "Temizlik tamamlandı!"
Bu scripti cron job olarak çalıştırmak mantıklı. Örneğin her Pazartesi gece yarısı otomatik temizlik:
# crontab -e ile ekleyin
0 0 * * 1 /path/to/eski_kuponlari_temizle.sh >> /var/log/kupon_temizlik.log 2>&1
Kupon Kullanım İstatistiklerini Raporlama
Kampanya performansını takip etmek için kullanım istatistiklerini düzenli olarak çekmek isteyebilirsiniz:
#!/bin/bash
# kupon_raporu.sh
# Aktif kuponların kullanım raporunu oluşturur
WP_USER="admin"
RAPOR_DOSYA="kupon_raporu_$(date +%Y%m%d).txt"
echo "Kupon Kullanım Raporu - $(date '+%d.%m.%Y %H:%M')" > $RAPOR_DOSYA
echo "===========================================" >> $RAPOR_DOSYA
echo "" >> $RAPOR_DOSYA
wp wc coupon list
--user=$WP_USER
--format=json
--fields=id,code,discount_type,amount,usage_count,usage_limit,date_expires |
jq -r '.[] |
"Kod: (.code)n Tür: (.discount_type) | Miktar: (.amount)n Kullanım: (.usage_count)/(if .usage_limit == 0 then "Sınırsız" else (.usage_limit|tostring) end)n Son Tarih: (if .date_expires == null then "Belirtilmemiş" else .date_expires.date[:10] end)n"' >> $RAPOR_DOSYA
echo "Rapor oluşturuldu: $RAPOR_DOSYA"
cat $RAPOR_DOSYA
Bu raporu e-postayla gönderecek şekilde genişletmek de mümkün. mail komutuyla birleştirip günlük otomatik rapor sistemine dönüştürebilirsiniz.
Önemli Notlar ve Sık Yapılan Hatalar
Sahada edindiğim deneyimlerden bazı kritik noktaları paylaşayım:
- –user parametresini unutmayın: WP CLI ile WooCommerce komutlarını çalıştırırken
--userparametresi olmadan komutlar çalışmaz ya da yetki hatası verir. Her komuta ekleyin.
- Tarih formatına dikkat:
--date_expiresparametresi ISO 8601 formatı bekler.2024-12-31şeklinde vermeniz yeterli, saat bilgisi opsiyonel.
- discount_type değerleri:
percent,fixed_cart,fixed_productdışında bir değer girerseniz WooCommerce hata verir. Küçük harf olmasına dikkat edin.
- amount bir string: Bazı durumlarda sayısal değerleri tırnak içinde string olarak geçmeniz gerekebilir.
--amount="20"şeklinde kullanmak daha güvenli.
- Büyük toplu işlemlerde rate limiting: Çok sayıda kupon oluştururken kısa bir gecikme eklemek sunucuyu rahatlatır. Döngülerinize
sleep 0.5ekleyebilirsiniz.
- Test ortamında deneyin: Büyük kampanya kuponlarını production’a basmadan önce mutlaka staging ortamında test edin. Yanlış parametre ile binlerce kupon oluşturmak ve geri almak can sıkıcı.
- Yedek alın: Toplu silme veya güncelleme işlemlerinden önce veritabanı yedeği almayı ihmal etmeyin.
wp db export backup.sqlile hızlıca yedek alabilirsiniz.
Komutları Hızlı Referans Olarak Kaydetme
WP CLI’nin alias özelliğini kullanarak sık kullandığınız komutları kısayol olarak kaydedebilirsiniz:
# wp-cli.yml dosyasına alias ekle
cat >> ~/.wp-cli/config.yml << 'EOF'
@kupon-listele:
path: /var/www/html
user: admin
format: table
fields: id,code,discount_type,amount,usage_count,date_expires
EOF
Sonuç
WP CLI ile WooCommerce kupon yönetimi, büyük kampanyaları ve rutin bakım işlerini otomatize etmek için gerçekten güçlü bir araç. Panel üzerinden tek tek yapacağınız işlemleri dakikalar içinde halledebiliyorsunuz. Üstelik scriptlerinizi versiyon kontrolüne (Git) ekleyerek kampanya geçmişini de dokümante etmiş oluyorsunuz.
En çok işinize yarayacak pratikler: Black Friday gibi büyük kampanyalarda kupon oluşturma scriptleri hazırlamak, kişisel kuponları otomatik üretmek için CRM sisteminizle entegrasyon kurmak ve süresi dolmuş kuponları haftalık cron job ile temizlemek. Bu alışkanlıkları oturttuktan sonra kupon yönetimi artık sizi meşgul eden bir iş olmaktan çıkıyor.
Komutları kendi ortamınızda deneyimlerken --dry-run benzeri bir seçenek WooCommerce komutlarında maalesef yok, bu yüzden önce staging’de test etme alışkanlığını kaybetmeyin. Üretim ortamında yapılan bir hata, özellikle toplu işlemlerde, düzeltmesi zaman alan sonuçlar doğurabiliyor.
