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 --categories gibi array parametrelerde dikkatli olun
  • Boş sonuç döndürme: --per_page değ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.

Bir yanıt yazın

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