WP CLI ile WooCommerce Ürün Özelliği Tanımlama: wc product_attr Kullanımı

WooCommerce mağazanızda yüzlerce ürün varken, her birinin renk, beden, malzeme gibi özelliklerini tek tek yönetmek gerçek bir kabus olabilir. WP-CLI’nin wc product_attr komutu tam da bu noktada devreye giriyor ve ürün özelliklerini terminal üzerinden hızlıca tanımlamanıza, güncellemenize ve silmenize olanak sağlıyor. Özellikle toplu operasyonlar, migration senaryoları veya staging-production senkronizasyonu gibi durumlarda bu komutun değerini anlıyorsunuz.

WC Product_Attr Nedir?

WooCommerce’de ürün özellikleri (attributes), ürünlerin varyantlarını oluşturmak ya da sadece bilgi amaçlı özellik tanımlamak için kullanılır. Örneğin bir giyim mağazasında “Renk”, “Beden”, “Kumaş Türü” gibi özellikler tanımlarsınız. Bu özellikler ya global (tüm ürünlerde kullanılabilir) ya da ürüne özel olabilir.

WP-CLI üzerinden wc product_attr komutu, bu global özelliklerin yönetimini komut satırından yapmanızı sağlar. WooCommerce REST API altyapısını kullandığı için yapacağınız işlemler tam anlamıyla API üzerinden gerçekleşir, dolayısıyla güvenilir ve tutarlıdır.

Temel Komut Yapısı

wp wc product_attr <command> [options] --user=<kullanici>

--user parametresi kritik önem taşır. WooCommerce API işlemleri için yönetici yetkisine sahip bir kullanıcı belirtmeniz gerekir. Bu parametreyi atladığınızda çoğu komut hata verecektir.

Ön Hazırlık: WP-CLI ve WooCommerce Kontrolü

Komutları çalıştırmadan önce ortamınızın hazır olduğundan emin olun:

# WP-CLI versiyonunu kontrol et
wp --version

# WooCommerce eklentisinin aktif olduğunu doğrula
wp plugin status woocommerce

# Mevcut WooCommerce komutlarını listele
wp wc --help

# Hangi kullanıcıların admin olduğunu bul
wp user list --role=administrator --fields=ID,user_login

Çıktıda woocommerce eklentisinin Active durumda olduğunu gördükten sonra devam edebilirsiniz. --user parametresi için bulduğunuz admin kullanıcı ID’sini veya login adını kullanacaksınız.

Mevcut Ürün Özelliklerini Listeleme

Öncelikle mağazada zaten tanımlı olan özellikleri görmek için list alt komutunu kullanın:

# Tüm ürün özelliklerini listele
wp wc product_attr list --user=admin

# JSON formatında daha detaylı çıktı al
wp wc product_attr list --user=admin --format=json

# Sadece belirli alanları göster
wp wc product_attr list --user=admin --fields=id,name,slug,type,order_by

Bu komut çalıştığında şöyle bir çıktı görürsünüz:

+----+--------+--------+--------+----------+
| id | name   | slug   | type   | order_by |
+----+--------+--------+--------+----------+
| 1  | Renk   | renk   | select | menu_order |
| 2  | Beden  | beden  | select | menu_order |
+----+--------+--------+--------+----------+

–format parametresi için kullanabileceğiniz değerler: table, json, csv, ids, count şeklinde sıralanabilir. Özellikle başka bir script’e veri besleyecekseniz json veya csv tercih edin.

Yeni Ürün Özelliği Oluşturma

Basit Özellik Tanımlama

# Temel bir renk özelliği oluştur
wp wc product_attr create 
  --name="Renk" 
  --slug="renk" 
  --type="select" 
  --order_by="menu_order" 
  --has_archives=true 
  --user=admin

Başarılı bir oluşturma işleminde şu çıktıyı görürsünüz:

Success: Created product_attr 3.

Dönen ID’yi not alın, sonraki işlemlerde kullanacaksınız.

Önemli Parametreler

  • –name: Özelliğin görünen adı, zorunlu alan
  • –slug: URL dostu isim, genellikle otomatik üretilir ama belirtmek iyidir
  • –type: select (açılır liste) veya button değerlerini alır
  • –order_by: Terimlerin sıralama kriteri; menu_order, name, name_num, id olabilir
  • –has_archives: true yaparsanız bu özellik için arşiv sayfası oluşturulur

Toplu Özellik Oluşturma – Gerçek Dünya Senaryosu

Diyelim ki yeni bir e-ticaret sitesi kuruyorsunuz ve 10 farklı özellik tanımlamanız gerekiyor. Tek tek komut yazmak yerine bir bash script hazırlayın:

#!/bin/bash

# attributes.sh - Toplu özellik oluşturma scripti
WP_PATH="/var/www/html/mymağaza"
ADMIN_USER="admin"

declare -A ATTRIBUTES
ATTRIBUTES["Renk"]="renk"
ATTRIBUTES["Beden"]="beden"
ATTRIBUTES["Malzeme"]="malzeme"
ATTRIBUTES["Marka"]="marka"
ATTRIBUTES["Menşei"]="mensei"
ATTRIBUTES["Koku"]="koku"

for attr_name in "${!ATTRIBUTES[@]}"; do
    attr_slug="${ATTRIBUTES[$attr_name]}"
    
    result=$(wp wc product_attr create 
        --name="$attr_name" 
        --slug="$attr_slug" 
        --type="select" 
        --order_by="menu_order" 
        --has_archives=true 
        --user=$ADMIN_USER 
        --path=$WP_PATH 
        2>&1)
    
    if echo "$result" | grep -q "Success"; then
        echo "[OK] '$attr_name' özelliği oluşturuldu: $result"
    else
        echo "[HATA] '$attr_name' oluşturulamadı: $result"
    fi
done

echo "İşlem tamamlandı."

Bu scripti çalıştırmak için:

chmod +x attributes.sh
./attributes.sh

Mevcut Özelliği Görüntüleme ve Güncelleme

Tek Özelliğin Detaylarını Alma

# ID ile özellik detaylarını gör
wp wc product_attr get 1 --user=admin

# JSON formatında al
wp wc product_attr get 1 --user=admin --format=json

Özellik Güncelleme

Mevcut bir özelliği güncellemek için update alt komutunu kullanın:

# ID'si 1 olan özelliğin adını güncelle
wp wc product_attr update 1 
  --name="Ana Renk" 
  --user=admin

# Sıralama kriterini değiştir
wp wc product_attr update 1 
  --order_by="name" 
  --user=admin

# Arşiv sayfasını devre dışı bırak
wp wc product_attr update 2 
  --has_archives=false 
  --user=admin

Güncelleme işlemlerinde sadece değiştirmek istediğiniz parametreleri belirtmeniz yeterlidir, diğer alanlar olduğu gibi kalır.

Özellik Silme

# Tek özellik silme
wp wc product_attr delete 3 --user=admin

# Silme işlemini zorla (onay sormadan)
wp wc product_attr delete 3 --force=true --user=admin

Dikkat: Bir özelliği sildiğinizde, o özelliğe bağlı tüm terimler (renkler, bedenler vb.) ve ürünlerle ilişkileri de silinir. Production ortamında silme işleminden önce mutlaka yedek alın.

Migration Senaryosu: Staging’den Production’a Özellik Aktarımı

Bu senaryo gerçek hayatta sıkça karşılaşılan bir durum. Staging ortamında hazırladığınız özellik yapısını production’a taşımak istiyorsunuz:

#!/bin/bash

# migrate_attrs.sh
# Staging'den özellikleri JSON olarak al, production'a aktar

STAGING_PATH="/var/www/staging"
PROD_PATH="/var/www/production"
ADMIN_USER="admin"
BACKUP_FILE="/tmp/attributes_backup_$(date +%Y%m%d_%H%M%S).json"

echo "Staging'deki özellikler alınıyor..."

# Staging'den özellikleri JSON olarak çek
wp wc product_attr list 
  --user=$ADMIN_USER 
  --path=$STAGING_PATH 
  --format=json > $BACKUP_FILE

echo "Özellikler $BACKUP_FILE dosyasına kaydedildi."

# JSON dosyasını okuyarak production'a aktar
# jq aracının kurulu olduğunu varsayıyoruz
if ! command -v jq &> /dev/null; then
    echo "jq kurulu değil. Yükleniyor..."
    apt-get install -y jq 2>/dev/null || yum install -y jq 2>/dev/null
fi

echo "Production'a aktarılıyor..."

cat $BACKUP_FILE | jq -c '.[]' | while read attr; do
    name=$(echo $attr | jq -r '.name')
    slug=$(echo $attr | jq -r '.slug')
    type=$(echo $attr | jq -r '.type')
    order_by=$(echo $attr | jq -r '.order_by')
    has_archives=$(echo $attr | jq -r '.has_archives')
    
    # Production'da zaten var mı kontrol et
    existing=$(wp wc product_attr list 
        --user=$ADMIN_USER 
        --path=$PROD_PATH 
        --format=json 2>/dev/null | jq -r ".[] | select(.slug=="$slug") | .id")
    
    if [ -n "$existing" ]; then
        echo "[ATLA] '$name' zaten production'da mevcut (ID: $existing)"
        continue
    fi
    
    result=$(wp wc product_attr create 
        --name="$name" 
        --slug="$slug" 
        --type="$type" 
        --order_by="$order_by" 
        --has_archives=$has_archives 
        --user=$ADMIN_USER 
        --path=$PROD_PATH 
        2>&1)
    
    echo "[OK] '$name' production'a aktarıldı: $result"
done

echo "Migration tamamlandı. Yedek dosya: $BACKUP_FILE"

Özellik Terimlerini Yönetmek: product_attr_terms

Özellikleri tanımladıktan sonra bu özelliklere ait terimleri (örneğin “Renk” özelliğine “Kırmızı”, “Mavi”, “Yeşil” değerlerini) de WP-CLI ile ekleyebilirsiniz. Bu komut wc product_attr ile yakından ilgili olduğu için burada da değinelim:

# Renk özelliğine (ID:1) yeni terim ekle
wp wc product_attr_term create 1 
  --name="Kırmızı" 
  --slug="kirmizi" 
  --description="Ateş kırmızısı ton" 
  --user=admin

# Tüm terimleri listele
wp wc product_attr_term list 1 --user=admin

# Toplu terim ekleme
for color in "Kırmızı:kirmizi" "Mavi:mavi" "Yeşil:yesil" "Siyah:siyah" "Beyaz:beyaz"; do
    name=$(echo $color | cut -d: -f1)
    slug=$(echo $color | cut -d: -f2)
    
    wp wc product_attr_term create 1 
        --name="$name" 
        --slug="$slug" 
        --user=admin
    
    echo "$name terimi eklendi."
done

Hata Ayıklama ve Sorun Giderme

Sık Karşılaşılan Hatalar

“Error: Sorry, you are not allowed to do this.” hatasını alıyorsanız:

# Kullanıcının yönetici olduğunu doğrula
wp user get admin --fields=roles --user=admin

# Yetki varsa WooCommerce izinlerini kontrol et
wp option get woocommerce_api_enabled

“Error: No route was found matching the URL and request method” hatasında:

# WooCommerce API'sinin aktif olup olmadığını kontrol et
wp option get woocommerce_api_enabled

# Aktif değilse aç
wp option update woocommerce_api_enabled yes

# Kalıcı bağlantıları yenile
wp rewrite flush

Özellik slug çakışması durumunda:

# Mevcut slug'ları kontrol et
wp wc product_attr list --user=admin --fields=id,name,slug --format=csv

# Çakışan slug'u güncelle
wp wc product_attr update 5 --slug="yeni-benzersiz-slug" --user=admin

Debug Modu ile Çalışma

Bir komutun arka planda ne yaptığını görmek istiyorsanız:

# WP_DEBUG ile çalıştır
WP_DEBUG=1 wp wc product_attr list --user=admin

# Daha fazla bilgi için --debug bayrağı
wp wc product_attr create --name="Test" --user=admin --debug

Cron ile Otomatik Özellik Yönetimi

Büyük mağazalarda özellik yapısının periyodik olarak kontrol edilmesi ve raporlanması gerekebilir. Bunun için basit bir monitoring scripti:

#!/bin/bash

# attr_monitor.sh - Günlük özellik raporu
WP_PATH="/var/www/html"
ADMIN_USER="admin"
LOG_FILE="/var/log/wc_attributes.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$DATE] Özellik kontrolü başlıyor..." >> $LOG_FILE

# Toplam özellik sayısını al
attr_count=$(wp wc product_attr list 
  --user=$ADMIN_USER 
  --path=$WP_PATH 
  --format=count 2>/dev/null)

echo "[$DATE] Toplam özellik sayısı: $attr_count" >> $LOG_FILE

# Özelliklerin listesini kaydet
wp wc product_attr list 
  --user=$ADMIN_USER 
  --path=$WP_PATH 
  --format=json >> $LOG_FILE 2>&1

echo "[$DATE] Rapor tamamlandı." >> $LOG_FILE

Bu scripti cron’a eklemek için:

# Crontab'ı düzenle
crontab -e

# Her sabah 08:00'de çalıştır
0 8 * * * /usr/local/bin/attr_monitor.sh

Performans Önerileri

Büyük mağazalarda toplu işlemler yaparken dikkat etmeniz gereken bazı noktalar var:

  • –prompt bayrağını production’da kullanmayın, script akışını keser
  • Toplu işlemlerde işlemler arasına sleep 0.5 koyun, veritabanını bunaltmamak için
  • Büyük import işlemlerini screen veya tmux içinde çalıştırın, bağlantı kopmasına karşı
  • İşlem öncesi wp cache flush yapın, stale cache sorunlarını engelleyin
  • Çok sayıda özellik ekleyecekseniz wp maintenance-mode activate ile siteyi geçici kapatın
# Güvenli toplu işlem şablonu
wp maintenance-mode activate
wp cache flush

# ... toplu işlemleriniz ...

wp cache flush
wp maintenance-mode deactivate
echo "İşlem tamamlandı, site yeniden açıldı."

Sonuç

wp wc product_attr komutu, WooCommerce mağazanızın özellik yönetimini otomatize etmenin en temiz yolu. Tek seferlik operasyonlarda zaman kazandırırken, CI/CD pipeline’larına entegre ettiğinizde gerçek gücünü ortaya koyuyor.

Özet olarak öğrendiklerimiz:

  • list ile mevcut özellikleri görüntüleme ve farklı formatlarda export etme
  • create ile yeni özellik tanımlama ve parametrelerini doğru kullanma
  • update ile var olan özellikleri değiştirme
  • delete ile özellik silme ve dikkat edilmesi gerekenler
  • product_attr_term ile özellik terimlerini yönetme
  • Migration, monitoring ve toplu işlem senaryolarında script geliştirme
  • Sık karşılaşılan hataları giderme yöntemleri

Bir sonraki adım olarak wp wc product_attr_term komutunu derinlemesine incelemenizi ve özellik-terim yapısını tam anlamıyla WP-CLI üzerinden yönetmeyi öğrenmenizi tavsiye ederim. Bu iki komutu birlikte kullandığınızda WooCommerce ürün yapısı üzerinde tam kontrol sahibi olursunuz ve günlerce sürecek manuel işlemleri dakikalara indirebilirsiniz.

Bir yanıt yazın

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