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_product değ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 --user parametresi olmadan komutlar çalışmaz ya da yetki hatası verir. Her komuta ekleyin.
  • Tarih formatına dikkat: --date_expires parametresi ISO 8601 formatı bekler. 2024-12-31 şeklinde vermeniz yeterli, saat bilgisi opsiyonel.
  • discount_type değerleri: percent, fixed_cart, fixed_product dışı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.5 ekleyebilirsiniz.
  • 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.sql ile 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.

Bir yanıt yazın

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