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.
