WooCommerce CLI ile Sipariş Raporlama ve Dışa Aktarma

E-ticaret sitelerini yönetirken en can sıkıcı işlerden biri sipariş raporlarını hazırlamaktır. Muhasebe departmanı senden aylık satış özeti istiyor, patron geçen haftanın en çok satan ürünlerini soruyor, bir yandan da WooCommerce admin paneline giriş yapmadan bu verileri çıkarmaya çalışıyorsun. WP-CLI ile bu işleri terminalde, hızlı ve otomatize bir şekilde halletmek mümkün. Bu yazıda WooCommerce CLI komutlarını kullanarak sipariş raporlama ve dışa aktarma konusunu gerçek dünya senaryolarıyla ele alacağız.

WooCommerce CLI’ye Giriş

WP-CLI, WordPress’in komut satırı arayüzüdür ve WooCommerce kendi CLI komutlarını bu sisteme entegre etmiştir. wc komutu ile WooCommerce nesneleri üzerinde CRUD işlemleri yapabilir, raporlar çekebilir ve verileri çeşitli formatlarda dışa aktarabilirsin.

Öncelikle WooCommerce CLI’nin çalışır durumda olduğunu doğrulayalım:

wp --info
wp plugin status woocommerce
wp wc --help

Eğer wp wc komutu tanınmıyorsa WooCommerce eklentisinin aktif olduğundan emin ol. WooCommerce 3.0 ve üzeri sürümlerde CLI desteği varsayılan olarak gelir.

WooCommerce CLI komutlarını kullanabilmek için bir kullanıcı belirtmen gerekir. Bu kullanıcının Administrator rolünde olması zorunludur:

wp wc order list --user=1

Buradaki --user=1 parametresi WordPress kullanıcı ID’sini belirtir. Admin kullanıcının ID’sini bilmiyorsan şu komutla bulabilirsin:

wp user list --role=administrator --fields=ID,user_login,user_email

Temel Sipariş Listeleme Komutları

WooCommerce CLI ile siparişleri listelemek oldukça basit. En temel haliyle:

wp wc order list --user=1

Bu komut tüm siparişleri JSON formatında döndürür. Ancak çıktı oldukça ham ve uzun olacaktır. Daha okunabilir bir çıktı için --format parametresini kullanabiliriz:

wp wc order list --user=1 --format=table

Faydalı Format Seçenekleri

WP-CLI’nin --format parametresi birkaç seçenek sunar:

  • table: Terminalde okunabilir tablo formatı
  • json: Makine tarafından okunabilir JSON çıktısı
  • csv: Virgülle ayrılmış değerler, Excel’e aktarım için ideal
  • yaml: YAML formatı, config dosyaları ve debug için kullanışlı
  • ids: Sadece ID listesi döndürür
  • count: Toplam kayıt sayısını döndürür

Belirli alanları görmek istiyorsan --fields parametresini kullan:

wp wc order list --user=1 --format=table --fields=id,status,total,date_created

Bu komut sana sadece sipariş ID, durum, toplam tutar ve oluşturulma tarihini gösterir. Çok daha temiz bir çıktı elde edersin.

Duruma Göre Sipariş Filtreleme

Gerçek dünyada genellikle tüm siparişleri değil, belirli durumdaki siparişleri görmek isteriz. WooCommerce’de sipariş durumları şunlardır:

  • pending: Ödeme bekliyor
  • processing: İşleniyor
  • on-hold: Beklemede
  • completed: Tamamlandı
  • cancelled: İptal edildi
  • refunded: İade edildi
  • failed: Başarısız

Sadece işlemdeki siparişleri listelemek için:

wp wc order list --user=1 --status=processing --format=table --fields=id,total,date_created,customer_id

İptal edilen siparişlerin toplam sayısını görmek istiyorsan:

wp wc order list --user=1 --status=cancelled --format=count

Bu basit bir komut olmasına rağmen inanılmaz işe yarar. Muhasebeci sana “bu ay kaç sipariş iptal edildi?” diye sorduğunda saniyeler içinde cevap verebilirsin.

Tarih Aralığına Göre Filtreleme ve Raporlama

Aylık satış raporları için tarih filtrelemesi şart. WooCommerce CLI’de tarih filtreleme --after ve --before parametreleriyle yapılır:

wp wc order list --user=1 
  --after="2024-01-01T00:00:00" 
  --before="2024-01-31T23:59:59" 
  --status=completed 
  --format=table 
  --fields=id,total,date_created

Bu komut Ocak 2024’te tamamlanan tüm siparişleri listeler. Tarihleri ISO 8601 formatında vermen gerektiğine dikkat et.

Geçen ayın siparişlerini dinamik olarak çekmek istiyorsan bunu bir bash scripti ile otomatize edebilirsin:

#!/bin/bash

# Geçen ayın başını ve sonunu hesapla
LAST_MONTH_START=$(date -d "$(date +%Y-%m-01) -1 month" +%Y-%m-01)
LAST_MONTH_END=$(date -d "$(date +%Y-%m-01) -1 day" +%Y-%m-%d)

SITE_PATH="/var/www/html/wordpress"
ADMIN_USER="1"

echo "=== Aylık Sipariş Raporu ==="
echo "Dönem: $LAST_MONTH_START - $LAST_MONTH_END"
echo ""

echo "Tamamlanan Siparişler:"
wp --path=$SITE_PATH wc order list 
  --user=$ADMIN_USER 
  --after="${LAST_MONTH_START}T00:00:00" 
  --before="${LAST_MONTH_END}T23:59:59" 
  --status=completed 
  --format=count

echo "İptal Edilen Siparişler:"
wp --path=$SITE_PATH wc order list 
  --user=$ADMIN_USER 
  --after="${LAST_MONTH_START}T00:00:00" 
  --before="${LAST_MONTH_END}T23:59:59" 
  --status=cancelled 
  --format=count

Bu scripti cron ile ayın ilk günü çalıştırarak otomatik aylık rapor alabilirsin.

CSV ile Dışa Aktarma

CSV dışa aktarma, en sık kullanılan senaryodur. Muhasebe departmanı genellikle Excel veya Google Sheets ile çalışır ve CSV formatı bu araçlarla mükemmel uyum sağlar.

wp wc order list --user=1 
  --status=completed 
  --after="2024-01-01T00:00:00" 
  --before="2024-12-31T23:59:59" 
  --format=csv 
  --fields=id,status,total,currency,customer_id,date_created 
  > /tmp/woocommerce_orders_2024.csv

> ile çıktıyı doğrudan dosyaya yönlendiriyoruz. /tmp yerine daha kalıcı bir dizin kullanmak istersen sunucunda uygun bir path belirt.

Dosyanın oluşturulduğunu ve içeriğini kontrol etmek için:

ls -lh /tmp/woocommerce_orders_2024.csv
head -20 /tmp/woocommerce_orders_2024.csv
wc -l /tmp/woocommerce_orders_2024.csv

Sipariş Detaylarını Tek Tek Çekme

Bazen sadece liste değil, her siparişin detayını da CSV’ye eklemek istersin. Bunun için siparişlerin ID’lerini alıp her birini ayrı ayrı sorgulamak gerekir:

#!/bin/bash

SITE_PATH="/var/www/html/wordpress"
ADMIN_USER="1"
OUTPUT_FILE="/var/reports/orders_detail_$(date +%Y%m%d).csv"

# CSV başlığını yaz
echo "order_id,customer_email,billing_city,total,status,date_created" > $OUTPUT_FILE

# Tamamlanan sipariş ID'lerini al
ORDER_IDS=$(wp --path=$SITE_PATH wc order list 
  --user=$ADMIN_USER 
  --status=completed 
  --after="2024-01-01T00:00:00" 
  --format=ids)

# Her sipariş için detay çek
for ORDER_ID in $ORDER_IDS; do
  ORDER_DATA=$(wp --path=$SITE_PATH wc order get $ORDER_ID --user=$ADMIN_USER --format=json)
  
  EMAIL=$(echo $ORDER_DATA | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('billing',{}).get('email',''))")
  CITY=$(echo $ORDER_DATA | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('billing',{}).get('city',''))")
  TOTAL=$(echo $ORDER_DATA | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('total',''))")
  STATUS=$(echo $ORDER_DATA | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('status',''))")
  DATE=$(echo $ORDER_DATA | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('date_created',''))")
  
  echo "$ORDER_ID,$EMAIL,$CITY,$TOTAL,$STATUS,$DATE" >> $OUTPUT_FILE
  
  echo "İşlendi: Sipariş #$ORDER_ID"
done

echo "Rapor tamamlandı: $OUTPUT_FILE"

Bu script çok sayıda siparişte yavaş çalışabilir çünkü her sipariş için ayrı bir API çağrısı yapılır. Binlerce siparişin olduğu bir sitede bu yaklaşım yerine doğrudan veritabanı sorgusu kullanmak daha performanslı olacaktır.

WooCommerce Raporlama Endpoint’leri

WooCommerce CLI sadece sipariş yönetimi için değil, raporlama için de güçlü araçlar sunar. wp wc report komutu bu işe yarar:

wp wc report list --user=1

Bu komut kullanılabilir rapor türlerini listeler. WooCommerce’in sunduğu yerleşik raporlar şunlardır:

  • sales/by_date: Tarihe göre satışlar
  • sales/by_product: Ürüne göre satışlar
  • sales/by_category: Kategoriye göre satışlar
  • customers/new: Yeni müşteriler
  • coupons/by_coupon: Kupona göre raporlar
  • orders/totals: Sipariş toplamları

Satış raporunu çekmek için:

wp wc report sales/by_date 
  --user=1 
  --period=month 
  --date_min="2024-01-01" 
  --date_max="2024-01-31" 
  --format=table

--period parametresi için kullanılabilir değerler:

  • week: Haftalık
  • month: Aylık
  • last_month: Geçen ay
  • year: Yıllık
  • custom: Özel tarih aralığı (date_min ve date_max ile birlikte kullanılır)

Ürüne göre satış raporu çekmek için:

wp wc report sales/by_product 
  --user=1 
  --period=last_month 
  --format=table 
  --fields=product_id,name,items_sold,net_revenue

Bu rapor geçen ayın en çok satan ürünlerini gösterir. Patron her hafta sana “hangi ürün en çok satıyor?” diye soruyorsa bu komutu bir alias’a ekleyebilirsin.

Otomatik Rapor Scripti ve Cron Entegrasyonu

Gerçek dünyada raporlamayı manuel çalıştırmak yerine otomatize etmek istersin. İşte kapsamlı bir haftalık rapor scripti:

#!/bin/bash

# Haftalık WooCommerce Rapor Scripti
# /usr/local/bin/woo-weekly-report.sh olarak kaydet
# chmod +x /usr/local/bin/woo-weekly-report.sh

SITE_PATH="/var/www/html/mystore"
ADMIN_USER="1"
REPORT_DIR="/var/reports/woocommerce"
DATE_SUFFIX=$(date +%Y%m%d)
LOG_FILE="/var/log/woo-reports.log"

# Rapor dizinini oluştur
mkdir -p $REPORT_DIR

# Log fonksiyonu
log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}

log "Haftalık rapor oluşturma başladı"

# Geçen haftanın tarihlerini hesapla
WEEK_START=$(date -d "last monday -7 days" +%Y-%m-%d)
WEEK_END=$(date -d "last sunday" +%Y-%m-%d)

log "Dönem: $WEEK_START - $WEEK_END"

# 1. Tamamlanan siparişleri CSV'ye aktar
log "Tamamlanan siparişler dışa aktarılıyor..."
wp --path=$SITE_PATH wc order list 
  --user=$ADMIN_USER 
  --status=completed 
  --after="${WEEK_START}T00:00:00" 
  --before="${WEEK_END}T23:59:59" 
  --format=csv 
  --fields=id,total,currency,date_created,customer_id 
  > "$REPORT_DIR/completed_orders_${DATE_SUFFIX}.csv"

COMPLETED_COUNT=$(wp --path=$SITE_PATH wc order list 
  --user=$ADMIN_USER 
  --status=completed 
  --after="${WEEK_START}T00:00:00" 
  --before="${WEEK_END}T23:59:59" 
  --format=count)

log "Tamamlanan sipariş sayısı: $COMPLETED_COUNT"

# 2. İptal edilen siparişleri ayrı dosyaya aktar
log "İptal edilen siparişler dışa aktarılıyor..."
wp --path=$SITE_PATH wc order list 
  --user=$ADMIN_USER 
  --status=cancelled 
  --after="${WEEK_START}T00:00:00" 
  --before="${WEEK_END}T23:59:59" 
  --format=csv 
  --fields=id,total,date_created,customer_id 
  > "$REPORT_DIR/cancelled_orders_${DATE_SUFFIX}.csv"

# 3. İade edilen siparişler
wp --path=$SITE_PATH wc order list 
  --user=$ADMIN_USER 
  --status=refunded 
  --after="${WEEK_START}T00:00:00" 
  --before="${WEEK_END}T23:59:59" 
  --format=csv 
  --fields=id,total,date_created 
  > "$REPORT_DIR/refunded_orders_${DATE_SUFFIX}.csv"

# 4. Özet raporu oluştur
SUMMARY_FILE="$REPORT_DIR/weekly_summary_${DATE_SUFFIX}.txt"
cat > $SUMMARY_FILE << EOF
WooCommerce Haftalık Özet Raporu
Dönem: $WEEK_START - $WEEK_END
Oluşturma Tarihi: $(date)

Sipariş Durumları:
- Tamamlanan: $COMPLETED_COUNT
- İptal Edilen: $(wp --path=$SITE_PATH wc order list --user=$ADMIN_USER --status=cancelled --after="${WEEK_START}T00:00:00" --before="${WEEK_END}T23:59:59" --format=count 2>/dev/null)
- İade Edilen: $(wp --path=$SITE_PATH wc order list --user=$ADMIN_USER --status=refunded --after="${WEEK_START}T00:00:00" --before="${WEEK_END}T23:59:59" --format=count 2>/dev/null)
- Bekleyen: $(wp --path=$SITE_PATH wc order list --user=$ADMIN_USER --status=pending --after="${WEEK_START}T00:00:00" --before="${WEEK_END}T23:59:59" --format=count 2>/dev/null)

Raporlar: $REPORT_DIR
EOF

log "Özet raporu oluşturuldu: $SUMMARY_FILE"
log "Haftalık rapor oluşturma tamamlandı"

# Opsiyonel: Raporu email ile gönder
# mail -s "Haftalık WooCommerce Raporu" [email protected] < $SUMMARY_FILE

Bu scripti cron ile her Pazartesi sabahı çalıştırmak için:

# crontab -e ile aç ve şu satırı ekle
0 8 * * 1 /usr/local/bin/woo-weekly-report.sh

Müşteri Bazlı Sipariş Raporları

Bazen belirli bir müşterinin tüm siparişlerini görmek gerekir. Müşteri şikayet ettiğinde ya da VIP müşteri analizi yapılacağında bu işe yarar:

# Belirli bir müşterinin siparişlerini listele
wp wc order list 
  --user=1 
  --customer=42 
  --format=table 
  --fields=id,status,total,date_created

Burada --customer=42 WooCommerce müşteri ID’sidir. Müşteri ID’sini bulmak için:

wp wc customer list --user=1 --format=table --fields=id,email,first_name,last_name

Ya da email adresiyle arama:

wp wc customer list --user=1 --search="[email protected]" --format=table --fields=id,email,orders_count,total_spent

total_spent alanı müşterinin toplam harcamasını gösterir. VIP müşteri segmentasyonu için güçlü bir araç.

Sipariş Detaylarını Derinlemesine İnceleme

Tek bir siparişin tüm detaylarını görmek için wp wc order get komutunu kullan:

wp wc order get 1234 --user=1 --format=json | python3 -m json.tool

python3 -m json.tool ile JSON çıktısını güzel formatlanmış hale getiriyoruz. Bu komut sipariş içindeki ürünler, fatura adresi, nakliye bilgileri, kullanılan kuponlar ve daha fazlasını gösterir.

Belirli bir alanı hızlıca çekmek için:

# Bir siparişin satır kalemlerini (line items) görüntüle
wp wc order get 1234 --user=1 --field=line_items --format=json | python3 -m json.tool

Performans ve Büyük Veri Setleriyle Çalışma

Büyük e-ticaret sitelerinde binlerce sipariş olabilir. wp wc order list komutunun varsayılan sayfalama limiti 10 kayıttır. Daha fazla kayıt almak için --per_page parametresini kullan:

wp wc order list --user=1 --per_page=100 --page=1 --format=csv > orders_page1.csv
wp wc order list --user=1 --per_page=100 --page=2 --format=csv >> orders_page2.csv

Tüm sayfaları otomatik olarak toplamak için:

#!/bin/bash

SITE_PATH="/var/www/html/mystore"
ADMIN_USER="1"
OUTPUT_FILE="/tmp/all_orders.csv"
PER_PAGE=100
PAGE=1
FIRST_RUN=true

while true; do
  COUNT=$(wp --path=$SITE_PATH wc order list 
    --user=$ADMIN_USER 
    --per_page=$PER_PAGE 
    --page=$PAGE 
    --format=count 2>/dev/null)
  
  if [ "$COUNT" -eq "0" ]; then
    break
  fi
  
  if [ "$FIRST_RUN" = true ]; then
    wp --path=$SITE_PATH wc order list 
      --user=$ADMIN_USER 
      --per_page=$PER_PAGE 
      --page=$PAGE 
      --format=csv 
      --fields=id,status,total,date_created > $OUTPUT_FILE
    FIRST_RUN=false
  else
    wp --path=$SITE_PATH wc order list 
      --user=$ADMIN_USER 
      --per_page=$PER_PAGE 
      --page=$PAGE 
      --format=csv 
      --fields=id,status,total,date_created | tail -n +2 >> $OUTPUT_FILE
  fi
  
  echo "Sayfa $PAGE işlendi ($COUNT kayıt)"
  PAGE=$((PAGE + 1))
done

echo "Toplam kayıt sayısı: $(wc -l < $OUTPUT_FILE)"
echo "Dosya: $OUTPUT_FILE"

Bu script CSV başlığını ilk sayfada ekler, sonraki sayfalarda başlığı atlar (tail -n +2) ve tüm verileri tek dosyada toplar.

Sık Karşılaşılan Hatalar ve Çözümleri

WooCommerce CLI ile çalışırken karşılaşabileceğin yaygın sorunlar:

“Error: No WooCommerce user found” hatası: --user parametresini unutmuşsundur veya belirtilen kullanıcının yeterli yetkisi yoktur. Administrator rolündeki bir kullanıcı ID’si kullan.

Boş çıktı alma sorunu: Tarih formatına dikkat et. WooCommerce CLI ISO 8601 formatı bekler. 2024-01-01 yerine 2024-01-01T00:00:00 kullanmayı dene.

Çok yavaş çalışma: --per_page değerini 10’dan 50-100’e çıkar. Her API çağrısının overhead’i var.

CSV’de Türkçe karakter bozulması: Dosyayı açmadan önce encoding’i kontrol et:

file /tmp/orders.csv
# veya iconv ile dönüştür
iconv -f UTF-8 -t windows-1254 /tmp/orders.csv > /tmp/orders_windows.csv

Sonuç

WP-CLI ve WooCommerce CLI kombinasyonu, e-ticaret sitenizin sipariş verilerini terminal üzerinden yönetmek için güçlü bir araç seti sunar. Manuel rapor hazırlamak için WooCommerce admin panelinde dakikalarca geçirmek yerine, doğru komutları biliyorsan saniyeler içinde istediğin veriyi çıkarabilir ve CSV formatında muhasebecine, patronuna ya da iş zekası araçlarına iletebilirsin.

Özellikle cron ile otomatize edilmiş haftalık ve aylık rapor scriptleri, sysadmin olarak sana büyük zaman kazandırır. Bir kez yazıp kurar, sonra çalışmaya devam eder. Büyük veri setlerinde sayfalama mantığını doğru uygulamak performans sorunlarını önler. Tarih filtreleme ve durum bazlı filtreleme kombinasyonları, neredeyse her türlü raporlama ihtiyacını karşılar. Bu temeli oturdurduktan sonra wp wc komutunun geri kalan alt komutlarını da keşfetmeye başlayabilirsin. Ürün yönetimi, müşteri yönetimi ve kupon işlemleri için de benzer güçlü araçlar mevcut.

Bir yanıt yazın

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