WP CLI ile WooCommerce Ürün Oluşturma ve Yönetimi
E-ticaret sitelerini yönetirken en çok zaman harcanan işlerin başında ürün yönetimi geliyor. Yüzlerce hatta binlerce ürünü WordPress yönetim paneli üzerinden tek tek eklemek, güncellemek ya da silmek hem yorucu hem de hata yapmaya açık bir süreç. İşte tam bu noktada WP-CLI’nin WooCommerce eklentisiyle birlikte gelen wp wc product komutları hayat kurtarıcı oluyor. Terminal ekranına birkaç satır yazarak yapabileceğiniz işlemleri saatlerce fare tıklamalarıyla yapmak, 2024’te artık kabul edilemez bir durum.
Bu yazıda wp wc product komutlarını gerçek dünya senaryolarıyla birlikte ele alacağız. Toplu ürün oluşturma, fiyat güncellemeleri, stok yönetimi ve daha fazlasını komut satırından nasıl halledeceğimizi adım adım göreceğiz.
Ön Gereksinimler
Başlamadan önce birkaç şeyin yerli yerinde olması gerekiyor.
WP-CLI kurulumu en temel gereksinim. Sunucunuzda WP-CLI kurulu değilse şu komutlarla kurabilirsiniz:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info
WooCommerce REST API erişimi de gerekli çünkü wp wc komutları arka planda WooCommerce REST API’sini kullanıyor. Bunun için bir API kullanıcısı oluşturmanız ve komutları --user parametresiyle çalıştırmanız gerekiyor.
# Temel komut yapısı
wp wc product <komut> --user=admin
# Ya da kullanıcı ID ile
wp wc product <komut> --user=1
WooCommerce eklentisinin kurulu ve aktif olduğundan emin olun:
wp plugin is-active woocommerce && echo "WooCommerce aktif" || echo "WooCommerce pasif"
Ürün Listeleme ve Sorgulama
Önce mevcut ürünleri nasıl listeleyeceğimizi görelim. Bu komutları sıklıkla kullanacaksınız çünkü her işlem öncesinde durumu değerlendirmeniz gerekiyor.
# Tüm ürünleri listele
wp wc product list --user=1
# Daha okunaklı çıktı için belirli alanları seçin
wp wc product list --user=1 --fields=id,name,price,stock_status --format=table
# Sadece belirli bir kategorideki ürünleri getir
wp wc product list --user=1 --category=15 --format=json
# Stokta olmayan ürünleri filtrele
wp wc product list --user=1 --stock_status=outofstock --fields=id,name,stock_quantity
# Sayfa sayfa listeleme (büyük mağazalar için)
wp wc product list --user=1 --per_page=50 --page=1 --fields=id,name,price
Bu çıktıları bir dosyaya kaydetmek istiyorsanız:
wp wc product list --user=1 --fields=id,name,regular_price,sale_price --format=csv > urunler_listesi.csv
CSV çıktısı aldığınızda Excel veya LibreOffice Calc’ta açabilir, düzenleyebilir ve toplu güncelleme için kullanabilirsiniz. Envanter takibi yapan ekipler için bu özellik gerçekten çok değerli.
Yeni Ürün Oluşturma
Basit Ürün Oluşturma
En temel senaryo, tek bir basit ürün oluşturmak:
wp wc product create
--user=1
--name="Erkek Deri Cüzdan"
--regular_price="299.90"
--description="Gerçek deri malzemeden üretilmiş, 8 kart bölmeli erkek cüzdanı."
--short_description="Gerçek deri erkek cüzdanı"
--status="publish"
--manage_stock=true
--stock_quantity=50
--sku="ERK-CUZ-001"
Komut başarılı olursa ürünün ID’sini döndürür. Bu ID’yi not alın, sonraki işlemler için kullanacaksınız.
İndirimli Fiyat ile Ürün Oluşturma
wp wc product create
--user=1
--name="Kadın Spor Ayakkabı"
--regular_price="599.00"
--sale_price="449.00"
--sku="KDN-SPR-AYK-42"
--status="publish"
--manage_stock=true
--stock_quantity=25
--weight="0.8"
--categories='[{"id":8}]'
--tags='[{"id":12},{"id":15}]'
Burada dikkat edilmesi gereken nokta: categories ve tags parametreleri JSON formatında ID listesi alıyor. Kategori ve etiket ID’lerini önceden öğrenmeniz gerekiyor.
Kategori ID’lerini öğrenmek için:
wp wc product_cat list --user=1 --fields=id,name --format=table
Dijital Ürün Oluşturma
İndirilebilir ürünler için birkaç parametre daha eklemeniz gerekiyor:
wp wc product create
--user=1
--name="PHP ile Web Geliştirme E-Kitap"
--regular_price="49.90"
--type="simple"
--virtual=true
--downloadable=true
--sku="EBOOK-PHP-001"
--status="publish"
--description="300 sayfalık kapsamlı PHP programlama rehberi."
Dijital ürünler için stok yönetimi genellikle gerekmez, bu yüzden --manage_stock parametresini kullanmıyoruz.
Ürün Güncelleme
Tek Ürün Güncelleme
Elimizde ID’si olan bir ürünü güncellemek oldukça basit:
# Fiyat güncelleme
wp wc product update 142 --user=1 --regular_price="349.90"
# Stok güncelleme
wp wc product update 142 --user=1 --stock_quantity=100
# Ürünü yayından kaldırma
wp wc product update 142 --user=1 --status="draft"
# İndirim ekleme
wp wc product update 142 --user=1 --sale_price="299.90"
Toplu Fiyat Güncelleme – Gerçek Dünya Senaryosu
Diyelim ki tedarikçinizden zam geldi ve belirli bir kategorideki tüm ürünlerin fiyatlarını yüzde 15 artırmanız gerekiyor. Bunu bash scripti ile yapabilirsiniz:
#!/bin/bash
# Kategori ID 5 olan ürünlerin fiyatlarını %15 artır
CATEGORY_ID=5
ZAM_ORANI=1.15
WP_USER=1
echo "Kategori $CATEGORY_ID ürünleri için %15 zam uygulanıyor..."
# Kategorideki ürün ID'lerini al
URUN_IDLERI=$(wp wc product list
--user=$WP_USER
--category=$CATEGORY_ID
--fields=id,regular_price
--format=json
--per_page=100 | jq -r '.[] | "(.id) (.regular_price)"')
while IFS=' ' read -r ID FIYAT; do
if [ -n "$ID" ] && [ -n "$FIYAT" ] && [ "$FIYAT" != "0" ]; then
YENI_FIYAT=$(echo "scale=2; $FIYAT * $ZAM_ORANI" | bc)
wp wc product update $ID --user=$WP_USER --regular_price="$YENI_FIYAT"
echo "Ürün ID: $ID | Eski Fiyat: $FIYAT | Yeni Fiyat: $YENI_FIYAT"
fi
done <<< "$URUN_IDLERI"
echo "Zam işlemi tamamlandı!"
Bu scriptte jq aracını kullanıyoruz. Kurulu değilse:
sudo apt install jq # Debian/Ubuntu
sudo yum install jq # CentOS/RHEL
Stok Sıfırlama ve Toplu Stok Güncelleme
Sezon sonu sayımı yapılıyor ve tüm ürünlerin stok miktarlarını sıfırlamanız gerekiyor:
#!/bin/bash
# Tüm aktif ürünlerin stok miktarını sıfırla
WP_USER=1
URUN_IDLERI=$(wp wc product list
--user=$WP_USER
--status=publish
--fields=id
--format=json
--per_page=100 | jq -r '.[].id')
for ID in $URUN_IDLERI; do
wp wc product update $ID
--user=$WP_USER
--stock_quantity=0
--stock_status="outofstock"
echo "Ürün $ID stok sıfırlandı"
done
Değişken Ürün (Variable Product) Oluşturma
WooCommerce’de en karmaşık ürün tipi değişken ürünlerdir. Beden, renk gibi özelliklere göre farklı fiyat ve stok bilgisi tutan ürünler bunlardır. WP-CLI ile bu işi yapmak biraz daha fazla adım gerektiriyor.
# Önce ana değişken ürünü oluştur
wp wc product create
--user=1
--name="Erkek Polo Tişört"
--type="variable"
--status="publish"
--sku="POLO-TSR-001"
--description="Yüzde yüz pamuklu polo yaka tişört."
Bu komut size bir ürün ID’si verecek. Diyelim ki 250 oldu. Şimdi bu ürüne varyant ekleyeceğiz:
# Küçük beden, kırmızı renk varyantı
wp wc product_variation create 250
--user=1
--regular_price="149.90"
--stock_quantity=30
--manage_stock=true
--attributes='[{"id":1,"option":"Kırmızı"},{"id":2,"option":"S"}]'
--sku="POLO-TSR-001-RED-S"
# Orta beden, lacivert renk varyantı
wp wc product_variation create 250
--user=1
--regular_price="149.90"
--stock_quantity=45
--manage_stock=true
--attributes='[{"id":1,"option":"Lacivert"},{"id":2,"option":"M"}]'
--sku="POLO-TSR-001-NVY-M"
Buradaki id:1 ve id:2 değerleri WooCommerce ürün özelliklerinin (attributes) ID’lerini ifade ediyor. Özellik ID’lerini şu komutla görebilirsiniz:
wp wc product_attribute list --user=1 --fields=id,name
Ürün Silme
Tek Ürün Silme
# Çöp kutusuna gönder
wp wc product delete 142 --user=1
# Kalıcı olarak sil
wp wc product delete 142 --user=1 --force=true
Toplu Ürün Silme – Dikkatli Olun!
Bu işlem geri alınamaz, mutlaka yedek alın:
# Önce yedeği al
wp export --post_type=product --filename_format="urun_yedek_{Y}{m}{d}.xml"
# Belirli bir kategorideki tüm ürünleri sil
wp wc product list
--user=1
--category=20
--fields=id
--format=json | jq -r '.[].id' | while read ID; do
wp wc product delete $ID --user=1 --force=true
echo "Ürün $ID silindi"
done
Ürün Meta Verisi ve Özel Alanlar
Bazen standart ürün alanları yetmez, özel meta verisi eklemeniz gerekir. wp post meta komutunu kullanabilirsiniz:
# Ürün ID 142'ye özel meta veri ekle
wp post meta add 142 _tedarikci_kodu "TDK-2024-001"
wp post meta add 142 _garanti_suresi "2 Yil"
wp post meta add 142 _mensei_ulke "Turkiye"
# Meta veriyi güncelle
wp post meta update 142 _garanti_suresi "3 Yil"
# Meta veriyi görüntüle
wp post meta get 142 _garanti_suresi
# Tüm meta verileri listele
wp post meta list 142 --format=table
Ürün Görseli Atama
Ürün görseli eklemek için önce medya kütüphanesine görseli yüklemeli, sonra ürüne atamalısınız:
# Görseli medya kütüphanesine yükle
wp media import /var/www/html/gorseller/urun-001.jpg
--title="Erkek Deri Cüzdan"
--post_id=142
# Yukarıdaki komut size bir attachment ID verir, diyelim ki 380
# Şimdi bu görseli ürüne ana görsel olarak ata
wp wc product update 142 --user=1 --images='[{"id":380,"position":0}]'
Birden fazla görsel eklemek için:
wp wc product update 142
--user=1
--images='[{"id":380,"position":0},{"id":381,"position":1},{"id":382,"position":2}]'
Gerçek Dünya Senaryosu: Toplu Ürün İçe Aktarma
Bir Excel dosyasından CSV’ye çevirdiğiniz ürün listenizi toplu olarak eklemek istiyorsunuz. İşte bunun için kullanabileceğiniz bir script:
#!/bin/bash
# CSV'den toplu ürün oluşturma
# CSV formatı: isim,fiyat,indirimli_fiyat,stok,sku,kategori_id
DOSYA="urunler.csv"
WP_USER=1
BASARILI=0
BASARISIZ=0
# İlk satırı (başlık) atla
tail -n +2 "$DOSYA" | while IFS=',' read -r ISIM FIYAT INDIRIMLI STOK SKU KATEGORI; do
# Boş satırları atla
[ -z "$ISIM" ] && continue
SONUC=$(wp wc product create
--user=$WP_USER
--name="$ISIM"
--regular_price="$FIYAT"
--sale_price="$INDIRIMLI"
--stock_quantity="$STOK"
--sku="$SKU"
--categories="[{"id":$KATEGORI}]"
--manage_stock=true
--status=publish
--format=json 2>&1)
if echo "$SONUC" | grep -q '"id"'; then
URUN_ID=$(echo "$SONUC" | jq -r '.id')
echo "[BASARILI] $ISIM - ID: $URUN_ID"
BASARILI=$((BASARILI + 1))
else
echo "[HATA] $ISIM eklenemedi: $SONUC"
BASARISIZ=$((BASARISIZ + 1))
fi
# API'yi yormamak için kısa bekleme
sleep 0.5
done
echo "Tamamlandi! Basarili: $BASARILI | Basarisiz: $BASARISIZ"
Ürün Durumu Yönetimi
Kampanya dönemlerinde ürünleri hızlıca yayına almak veya kaldırmak için:
#!/bin/bash
# ID listesindeki ürünleri yayına al
URUN_IDLERI=(142 143 144 145 150 155 160)
WP_USER=1
for ID in "${URUN_IDLERI[@]}"; do
wp wc product update $ID --user=$WP_USER --status="publish"
echo "Ürün $ID yayına alındı"
done
echo "Kampanya ürünleri aktif edildi!"
Yıllık bazı sysadmin’lerin yaptığı hatalardan biri, büyük toplu işlemlerde herhangi bir test veya doğrulama yapmadan scripti çalıştırmak. Her zaman önce birkaç ürünle test edin:
# Test modu: sadece ilk 5 ürünü güncelle
wp wc product list --user=1 --per_page=5 --fields=id --format=json |
jq -r '.[].id' | while read ID; do
wp wc product update $ID --user=1 --status="draft"
echo "Test: Ürün $ID taslak yapıldı"
done
Performans İpuçları
Büyük mağazalarda toplu işlemler yaparken birkaç noktaya dikkat etmelisiniz.
Bellek limitini artırın işlem yapmadan önce:
# WP-CLI için PHP bellek limitini geçici artır
WP_CLI_PHP_ARGS='-d memory_limit=512M' wp wc product list --user=1 --per_page=500
WP-CLI cache temizleme toplu işlemler sonrasında performans sorunlarını çözebilir:
wp cache flush
wp rewrite flush
Cron ve önbellek konusunda dikkatli olun. Toplu işlem sırasında WooCommerce’nin otomatik stok bildirimlerini geçici devre dışı bırakabilirsiniz:
# WooCommerce mail bildirimlerini geçici kapat
wp option update woocommerce_email_new_order "no"
# Toplu işlemi yap
# ...
# Bildirimleri tekrar aç
wp option update woocommerce_email_new_order "yes"
Yardımcı Komutlar ve Debug
Bir şeyler ters gittiğinde debug için kullanabileceğiniz komutlar:
# Belirli bir ürünün tüm bilgilerini gör
wp wc product get 142 --user=1 --format=json | jq .
# WP-CLI debug modu
wp wc product list --user=1 --debug
# WooCommerce log dosyalarını kontrol et
tail -f /var/www/html/wp-content/uploads/wc-logs/woocommerce-*.log
Komutların tam parametrelerini unuttuğunuzda yardım alın:
wp wc product create --help
wp wc product update --help
wp wc product list --help
Sonuç
wp wc product komutları başlangıçta karmaşık görünse de bir kez alıştığınızda WooCommerce mağaza yönetiminin vazgeçilmez parçası haline geliyor. Yüzlerce ürünü tek tek güncelleme yerine birkaç satır scriptla halletmek, hem hata riskini azaltıyor hem de değerli zamanınızı kurtarıyor.
Bu yazıda ele aldığımız konuları özetlersek:
- Ürün listeleme ve filtreleme ile mevcut durumu hızlıca analiz edebiliyoruz
- Basit, dijital ve değişken ürün oluşturma işlemlerini terminal üzerinden yapabiliyoruz
- Toplu fiyat güncellemeleri ve stok yönetimi için bash scriptler yazabiliyoruz
- CSV dosyalarından toplu ürün aktarımı gerçekleştirebiliyoruz
- Kampanya yönetimi için ürün durumlarını hızlıca değiştirebiliyoruz
Pratik önerim şu: Bu komutları her gün kullandığınız bir .bashrc alias’ı haline getirin. Örneğin wc_list, wc_update gibi kısa takma adlar oluşturarak iş akışınızı daha da hızlandırabilirsiniz. Ayrıca scripterlerinizi /etc/cron.d/ altına ekleyerek gece saatlerinde otomatik çalışacak şekilde zamanlayabilirsiniz, bu sayede mesai saatlerinde sistemi yormamış olursunuz.
WP-CLI’nin gücü, tekrarlayan işleri otomatikleştirmek ve insan hatasını en aza indirmek konusunda gerçekten üst düzey. WooCommerce mağazanız büyüdükçe bu araçlara olan bağımlılığınız da artacak, erkenden öğrenmek her zaman kazançlı.
