WP CLI ile WooCommerce Araçlarını Çalıştırma: wp wc tool Kullanım Rehberi
WooCommerce mağazanızı komut satırından yönetmek, özellikle büyük kataloglarda veya otomatik süreçlerde hayat kurtarır. wp wc komutu, WP-CLI’nin WooCommerce eklentisiyle entegrasyonu sayesinde ürünleri, siparişleri, müşterileri ve çok daha fazlasını terminal üzerinden yönetmenizi sağlar. Fareyi bir kenara bırakıp script yazma zamanı.
wp wc Nedir ve Neden Kullanmalısınız
WP-CLI’nin temel wp komutu WordPress çekirdeğini yönetirken, wp wc komutu WooCommerce REST API’sini komut satırı üzerinden kullanmanızı sağlar. Yani aslında arka planda WooCommerce’in kendi API’siyle konuşuyorsunuz, sadece bunu bir HTTP isteği yerine terminal üzerinden yapıyorsunuz.
Bu aracın gerçek değeri şu senaryolarda ortaya çıkar: 5000 ürünlü bir mağazada toplu fiyat güncellemesi yapmanız gerektiğinde, siparişleri bir cron job ile otomatik işlemeniz gerektiğinde veya staging ortamına production verilerini aktarırken belirli siparişleri temizlemeniz gerektiğinde. Bunların hibirini yönetim panelinden yapmak hem yorucu hem de hata yapmaya açık.
Kurulum ve Ön Gereksinimler
wp wc komutunu kullanabilmek için birkaç şeyin yerine gelmesi gerekir.
- WP-CLI kurulu olmalı (en az 2.x sürümü)
- WooCommerce eklentisi aktif olmalı
- WooCommerce REST API etkin olmalı
- Bir API anahtarı çifti (Consumer Key ve Consumer Secret) oluşturulmuş olmalı
API anahtarlarını WooCommerce yönetim panelinden oluşturabilirsiniz: WooCommerce > Ayarlar > Gelişmiş > REST API. Okuma/Yazma yetkisi vermeyi unutmayın.
Komutu çalıştırmadan önce kimlik bilgilerinizi yapılandırmanız gerekir:
wp wc --user=admin
Ya da doğrudan kullanıcı ID’si ile:
wp wc product list --user=1
--user parametresi olmadan komutlar çalışmaz çünkü API yetkilendirme gerektiriyor. Genellikle admin rolündeki bir kullanıcı ID’si kullanmak en mantıklısı.
Temel Komut Yapısı
wp wc komutlarının genel yapısı şöyle:
wp wc <kaynak> <eylem> [parametreler] --user=<kullanici>
Burada kaynak product, order, customer gibi WooCommerce nesneleri oluyor. Eylem ise list, get, create, update, delete seçeneklerinden biri. Mevcut tüm kaynakları görmek için:
wp wc --help
Bu komut size tüm alt komutları listeler. Belirli bir kaynak hakkında detaylı yardım için:
wp wc product --help
wp wc order --help
Ürün Yönetimi
Ürünleri Listelemek
En sık kullanacağınız komutlardan biri ürün listelemek. Temel kullanım:
wp wc product list --user=1
Bu komut tüm ürünleri JSON formatında döndürür. Çıktıyı daha okunabilir hale getirmek için format parametresi kullanabilirsiniz:
wp wc product list --user=1 --format=table --fields=id,name,status,regular_price
Önemli parametreler:
- –per_page: Sayfa başına ürün sayısı, varsayılan 10, maksimum 100
- –page: Sayfalama için sayfa numarası
- –status: publish, draft, private gibi duruma göre filtrele
- –category: Kategori ID’sine göre filtrele
- –format: table, json, csv, yaml gibi çıktı formatları
- –fields: Hangi alanların gösterileceğini belirler
Mesela sadece taslak ürünleri listelemek için:
wp wc product list --user=1 --status=draft --format=table --fields=id,name,regular_price
Toplu Ürün Fiyat Güncellemesi
İşte gerçek dünya senaryosu: Tüm ürünlerin fiyatını %10 artırmanız gerekiyor. Bunu manuel yapmak yerine bir bash script yazabilirsiniz:
#!/bin/bash
USER_ID=1
SITE_PATH="/var/www/html/magaza"
# Tüm yayınlanmış ürünlerin ID'lerini al
product_ids=$(wp wc product list --user=$USER_ID --status=publish --per_page=100 --field=id --path=$SITE_PATH)
for id in $product_ids; do
# Mevcut fiyatı al
current_price=$(wp wc product get $id --user=$USER_ID --field=regular_price --path=$SITE_PATH)
if [ ! -z "$current_price" ] && [ "$current_price" != "0" ]; then
# %10 artır
new_price=$(echo "scale=2; $current_price * 1.10" | bc)
# Güncelle
wp wc product update $id --user=$USER_ID --regular_price=$new_price --path=$SITE_PATH
echo "Ürün $id güncellendi: $current_price -> $new_price"
fi
done
echo "Fiyat güncellemesi tamamlandı."
Bu script küçük kataloglar için gayet işe yarıyor ama 1000+ ürünlü mağazalarda --per_page=100 ile sayfalama yapmanız gerekecek.
Yeni Ürün Oluşturmak
Komut satırından ürün oluşturmak özellikle import scriptlerinde çok kullanışlı:
wp wc product create
--name="Test Ürünü"
--regular_price="99.90"
--status=publish
--description="Bu bir test ürünüdür."
--short_description="Kısa açıklama"
--user=1
Değişken ürün oluşturmak biraz daha karmaşık ama mümkün. Önce ana ürünü, sonra varyasyonları oluşturmanız gerekiyor.
Sipariş Yönetimi
Siparişleri Listelemek ve Filtrelemek
Siparişleri listelemek için:
wp wc order list --user=1 --format=table --fields=id,status,total,date_created
Belirli bir duruma göre filtrelemek:
wp wc order list --user=1 --status=processing --format=table
Sipariş durumları için geçerli değerler:
- pending: Ödeme bekliyor
- processing: İşlemde
- on-hold: Beklemede
- completed: Tamamlandı
- cancelled: İptal edildi
- refunded: İade edildi
- failed: Başarısız
Sipariş Durumu Toplu Güncelleme
Bazen eski “processing” durumundaki siparişleri toplu olarak tamamlamak gerekebilir. Örneğin veri tabanı migrasyonu sonrası ya da ödeme gateway sorununu çözdükten sonra:
#!/bin/bash
# 30 günden eski processing siparişleri tamamla
USER_ID=1
order_ids=$(wp wc order list
--user=$USER_ID
--status=processing
--per_page=100
--field=id
--date_max=$(date -d "30 days ago" +%Y-%m-%d))
for order_id in $order_ids; do
wp wc order update $order_id --user=$USER_ID --status=completed
echo "Sipariş #$order_id tamamlandı olarak işaretlendi"
done
Tek Sipariş Detaylarını Görme
Belirli bir siparişin detaylarını görmek için:
wp wc order get 1234 --user=1
JSON çıktısı yerine belirli bir alan almak isterseniz:
wp wc order get 1234 --user=1 --field=status
wp wc order get 1234 --user=1 --field=total
Müşteri Yönetimi
Müşteri Listesi ve Arama
wp wc customer list --user=1 --format=table --fields=id,email,first_name,last_name,orders_count
Belirli bir e-postaya göre müşteri bulmak:
wp wc customer list --user=1 [email protected]
Müşteri Verilerini Dışa Aktarma
KVKK veya GDPR kapsamında müşteri verilerini dışa aktarmanız gerektiğinde bu çok işe yarar. Tüm müşterileri CSV olarak almak:
wp wc customer list
--user=1
--format=csv
--fields=id,email,first_name,last_name,billing_city,billing_country
--per_page=100 > musteriler.csv
Bu komutu cron ile düzenli çalıştırıp yedek alabilirsiniz.
Müşteri Silme
Test ortamlarında sahte müşterileri temizlemek için:
wp wc customer delete 456 --user=1 --force=true
--force=true parametresi önemli, olmadan silme işlemi çalışmaz.
Kupon Yönetimi
Kuponlar WooCommerce operasyonlarının önemli bir parçası. Toplu kupon oluşturmak için:
#!/bin/bash
USER_ID=1
# 50 adet tekil kullanımlık %15 indirim kuponu oluştur
for i in $(seq 1 50); do
coupon_code="YILBASI2024-$(openssl rand -hex 4 | tr '[:lower:]' '[:upper:]')"
wp wc coupon create
--user=$USER_ID
--code="$coupon_code"
--discount_type=percent
--amount=15
--usage_limit=1
--date_expires="2024-12-31"
--individual_use=true
echo "Kupon oluşturuldu: $coupon_code"
done
Mevcut kuponları listelemek:
wp wc coupon list --user=1 --format=table --fields=id,code,discount_type,amount,usage_count
Süresi geçmiş kuponları bulmak ve silmek:
wp wc coupon list --user=1 --format=json |
jq '.[] | select(.date_expires != null) | .id' |
xargs -I{} wp wc coupon delete {} --user=1 --force=true
Vergi Yönetimi
Vergi sınıflarını ve oranlarını da wp wc ile yönetebilirsiniz:
# Mevcut vergi sınıflarını listele
wp wc tax_class list --user=1
# Vergi oranlarını listele
wp wc tax list --user=1 --format=table
Ürün Kategorileri ve Etiketler
Kategori İşlemleri
# Tüm kategorileri listele
wp wc product_cat list --user=1 --format=table --fields=id,name,slug,count
# Yeni kategori oluştur
wp wc product_cat create --user=1 --name="Yeni Kategori" --slug=yeni-kategori
# Kategori güncelle
wp wc product_cat update 12 --user=1 --name="Güncel Kategori Adı"
Toplu Ürün Kategorisi Değiştirme
Belirli bir kategorideki tüm ürünleri başka bir kategoriye taşımak:
#!/bin/bash
USER_ID=1
ESKİ_KATEGORİ_ID=5
YENI_KATEGORİ_ID=10
product_ids=$(wp wc product list
--user=$USER_ID
--category=$ESKİ_KATEGORİ_ID
--per_page=100
--field=id)
for id in $product_ids; do
wp wc product update $id
--user=$USER_ID
--categories='[{"id":'$YENI_KATEGORİ_ID'}]'
echo "Ürün $id taşındı"
done
Performans İpuçları
wp wc komutları özellikle büyük veri kümelerinde yavaş çalışabilir çünkü her komut bir API isteği yapıyor. Bunu aşmak için bazı pratik yöntemler var.
Sayfalama kullanın: 100’den fazla kayıt için döngü ile sayfalama yapın:
page=1
while true; do
results=$(wp wc product list --user=1 --per_page=100 --page=$page --field=id)
if [ -z "$results" ]; then
break
fi
for id in $results; do
# işlem yap
echo "İşleniyor: $id"
done
((page++))
done
WP-CLI cache: Komutlar arasında --no-debug kullanarak debug çıktısını kapatın, bu hafif de olsa performans farkı yaratır.
Doğrudan SQL: Çok büyük toplu işlemler için wp wc yerine wp db query ile doğrudan SQL yazmak çok daha hızlı olabilir. Ama bu yaklaşımda WooCommerce action’larını ve hook’larını tetiklemediğinizi unutmayın.
Gerçek Dünya Senaryosu: Stok Senkronizasyonu
Bir depo yönetim sistemiyle WooCommerce’i senkronize eden basit bir script:
#!/bin/bash
# Depo sisteminden CSV al (örnek: api_call.sh ile)
STOK_DOSYA="/tmp/stok_guncelleme.csv"
USER_ID=1
LOG_DOSYA="/var/log/wc_stok_sync.log"
echo "$(date): Stok senkronizasyonu başladı" >> $LOG_DOSYA
# CSV formatı: ürün_sku,stok_miktarı
while IFS=',' read -r sku miktar; do
# SKU ile ürün ID bul
product_id=$(wp wc product list
--user=$USER_ID
--sku=$sku
--field=id
--format=ids 2>/dev/null)
if [ ! -z "$product_id" ]; then
wp wc product update $product_id
--user=$USER_ID
--stock_quantity=$miktar
--manage_stock=true
echo "$(date): SKU $sku (ID: $product_id) -> Stok: $miktar" >> $LOG_DOSYA
else
echo "$(date): HATA - SKU bulunamadı: $sku" >> $LOG_DOSYA
fi
done < $STOK_DOSYA
echo "$(date): Stok senkronizasyonu tamamlandı" >> $LOG_DOSYA
Bu scripti crontab ile her gece çalıştırabilirsiniz:
0 2 * * * /usr/local/bin/stok_sync.sh
Hata Ayıklama ve Sorun Giderme
wp wc komutları bazen sessiz başarısız olabilir. Debug modunda çalıştırmak daha fazla bilgi verir:
wp wc product list --user=1 --debug
Yaygın hata durumları ve çözümleri:
- “Error: Sorry, you are not allowed to do that”: Kullanıcının yeterli yetkisi yok, admin kullanıcı ID’si kullandığınızdan emin olun
- “Error: wc command not found”: WooCommerce eklentisi aktif değil veya WP-CLI versiyonu eski
- “Invalid parameter”: JSON parametrelerinde syntax hatası var, özellikle
--categoriesgibi array parametrelerde dikkatli olun - Boş sonuç döndürme:
--per_pagedeğerini kontrol edin, büyük kataloglarda sayfalama gerekebilir
REST API’nin etkin olup olmadığını kontrol etmek için:
wp option get woocommerce_api_enabled
Eğer no dönüyorsa:
wp option update woocommerce_api_enabled yes
wp wc vs Doğrudan WP-CLI Komutları
Önemli bir ayrımı belirtmek lazım: wp wc WooCommerce REST API üzerinden çalışırken, bazı işlemler için doğrudan wp post, wp term veya wp db komutlarını kullanmak daha verimli olabilir.
Mesela tüm WooCommerce siparişlerini saymak:
# wp wc ile (yavaş, API çağrısı)
wp wc order list --user=1 --format=ids | wc -w
# wp post ile (hızlı, doğrudan DB)
wp post list --post_type=shop_order --format=ids | wc -w
Ama wp post update ile sipariş güncellemek WooCommerce hook’larını tetiklemez, bu yüzden stok güncellemeleri, e-posta bildirimleri gibi işlemler çalışmaz. Ne zaman hangisini kullanacağınızı bilmek önemli.
Sonuç
wp wc aracı, WooCommerce mağazalarının sistem yönetiminde ciddi bir güç katıyor. Toplu işlemler, otomasyon scriptleri ve cron job entegrasyonları için vazgeçilmez bir araç haline gelebilir. Özellikle birden fazla WooCommerce sitesi yönetiyorsanız veya CI/CD pipeline’larına mağaza konfigürasyonunu dahil etmek istiyorsanız bu aracı iyi öğrenmenizde büyük fayda var.
Başlangıç için kendi mağazanızda wp wc product list ve wp wc order list komutlarıyla tanışın. Ardından basit script’ler yazarak toplu işlemlere geçin. Önemli bir not: production’da her zaman önce staging ortamında test edin. Özellikle toplu güncelleme ve silme işlemlerinde geri dönüşü zor hatalar yapılabiliyor.
WooCommerce’in büyümesiyle birlikte komut satırı becerileriniz de büyüyecek, bu kombinasyon uzun vadede size hem zaman hem de stres tasarrufu sağlayacak.
