WP CLI ile wp term Komutu: Terim Oluşturma ve Yönetimi
WordPress sitenizde onlarca, hatta yüzlerce kategori ve etiket yönetmek zorunda kaldıysanız, admin panelinden tek tek bu işlemleri yapmak ne kadar can sıkıcı olabiliyor iyi biliyorsunuzdur. WP-CLI’nin wp term komutu tam da bu noktada hayat kurtarıyor. Toplu terim oluşturma, güncelleme, silme ve listeleme işlemlerini terminal üzerinden saniyeler içinde halledebiliyorsunuz. Bu yazıda wp term komutunun tüm inceliklerini, gerçek dünya senaryolarıyla birlikte ele alacağız.
wp term Nedir ve Ne İşe Yarar?
WordPress’te “term” kavramı, herhangi bir taxonomy’ye ait sınıflandırma birimidir. Kategoriler, etiketler, WooCommerce ürün kategorileri, özel taxonomy’ler… bunların hepsi birer term’dir. wp term komutu bu terimleri komut satırından yönetmenizi sağlar.
Temel alt komutlar şunlardır:
- wp term create: Yeni terim oluşturur
- wp term get: Belirli bir terimin bilgilerini getirir
- wp term list: Terimleri listeler
- wp term update: Mevcut terimi günceller
- wp term delete: Terimi siler
- wp term meta: Terim meta verilerini yönetir
- wp term recount: Post sayılarını yeniden hesaplar
Terim Oluşturma
Temel Kullanım
En basit haliyle bir kategori oluşturmak için:
wp term create category "Teknoloji" --slug=teknoloji --description="Teknoloji haberleri ve incelemeleri"
Bu komut çalıştığında WordPress, category taxonomy’si altında yeni bir terim oluşturur ve size terim ID’sini döndürür. --slug parametresi verilmezse WordPress otomatik bir slug üretir, ama özellikle Türkçe karakter içeren isimlerde slug’ın ne olacağı tahmin edilemeyebilir. Bu yüzden her zaman manuel belirtmek daha güvenli.
Hiyerarşik Terimler Oluşturma
Blog sitenizde “Yazılım” kategorisi altında “Frontend”, “Backend” ve “DevOps” alt kategorileri oluşturmanız gerektiğini düşünelim:
# Önce ana kategoriyi oluştur
wp term create category "Yazılım" --slug=yazilim
# Dönen ID'yi not al, diyelim ki 15 oldu
# Alt kategorileri oluştur
wp term create category "Frontend" --slug=frontend --parent=15
wp term create category "Backend" --slug=backend --parent=15
wp term create category "DevOps" --slug=devops --parent=15
--parent parametresi terim ID’si alır. Eğer parent’ın ID’sini bilmiyorsanız önce wp term list ile bulabilirsiniz.
Etiket Oluşturma
Etiketler (tags) hiyerarşik olmadığından --parent parametresi kullanılmaz:
wp term create post_tag "docker" --slug=docker --description="Docker container teknolojisi"
wp term create post_tag "kubernetes" --slug=kubernetes
wp term create post_tag "linux" --slug=linux
WooCommerce Ürün Kategorisi Oluşturma
WooCommerce kullananlar için bu komut özellikle güçlü. Bir e-ticaret sitesinde yüzlerce ürün kategorisi olabilir:
# Ana ürün kategorisi
wp term create product_cat "Elektronik" --slug=elektronik --description="Elektronik ürünler"
# Alt kategoriler
PARENT_ID=$(wp term list product_cat --name="Elektronik" --field=term_id)
wp term create product_cat "Telefon" --slug=telefon --parent=$PARENT_ID
wp term create product_cat "Laptop" --slug=laptop --parent=$PARENT_ID
wp term create product_cat "Tablet" --slug=tablet --parent=$PARENT_ID
Burada shell’in değişken özelliğini kullanarak ID’yi otomatik alıyoruz, böylece komutları birbirinden bağımsız çalıştırmak yerine bir akış haline getiriyoruz.
Terimleri Listeleme ve Sorgulama
wp term list Kullanımı
# Tüm kategorileri listele
wp term list category
# Belirli alanları göster
wp term list category --fields=term_id,name,slug,count
# Sadece üst seviye kategorileri listele
wp term list category --parent=0
# Belirli bir parent'ın alt terimlerini listele
wp term list category --parent=15
# Boş terimleri bul (post sayısı 0 olan)
wp term list category --hide_empty=false --fields=term_id,name,count
Çıktı Formatlarını Kullanma
WP-CLI’nin güçlü taraflarından biri farklı çıktı formatları sunmasıdır. Bunu script’lerde kullanmak işleri çok kolaylaştırır:
# JSON formatında al (script işleme için ideal)
wp term list category --format=json
# CSV olarak dışa aktar
wp term list category --format=csv > kategoriler.csv
# Sadece ID listesi al
wp term list category --field=term_id
# Sadece slug listesi
wp term list category --field=slug
Terim Bilgisi Almak
Belirli bir terimin detaylarına bakmak için:
# ID ile sorgula
wp term get category 15
# Belirli alanları getir
wp term get category 15 --field=name
wp term get category 15 --fields=name,slug,description,count
# Slug ile ID bul
wp term list category --slug=teknoloji --field=term_id
Terimleri Güncelleme
Temel Güncelleme İşlemleri
# İsim güncelle
wp term update category 15 --name="Yazılım Geliştirme"
# Slug güncelle
wp term update category 15 --slug=yazilim-gelistirme
# Açıklama ekle veya güncelle
wp term update category 15 --description="Yazılım geliştirme süreçleri, araçlar ve best practice'ler"
# Parent değiştir
wp term update category 20 --parent=15
Toplu Güncelleme Senaryosu
Diyelim ki tüm etiketlerin slug’larını küçük harfe çevirmek ve Türkçe karakterleri düzeltmek istiyorsunuz. Bunun için bir bash script yazabilirsiniz:
#!/bin/bash
# Tüm etiketlerin ID'lerini al ve her birini işle
wp term list post_tag --field=term_id --format=ids | tr ' ' 'n' | while read term_id; do
current_name=$(wp term get post_tag $term_id --field=name)
current_slug=$(wp term get post_tag $term_id --field=slug)
echo "İşleniyor: $current_name (ID: $term_id, Slug: $current_slug)"
# Slug'ı güncelle (örnek olarak mevcut adı küçük harfle yeniden yaz)
new_slug=$(echo "$current_name" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
wp term update post_tag $term_id --slug="$new_slug"
done
Terimleri Silme
Tekil Silme
# ID ile sil
wp term delete category 15
# Birden fazla ID sil
wp term delete category 15 20 25
# Slug ile sil (önce ID bul, sonra sil)
TERM_ID=$(wp term list category --slug=eski-kategori --field=term_id)
wp term delete category $TERM_ID
Boş Terimleri Toplu Silme
Uzun süredir kullanılan sitelerde post içermeyen onlarca boş kategori veya etiket birikebilir. Bunları temizlemek için:
# Boş etiketleri bul ve sil
wp term list post_tag --hide_empty=true --count=0 --field=term_id | while read id; do
wp term delete post_tag $id
done
# Daha temiz bir yöntem
wp term list post_tag --format=ids --count=0 | xargs -I{} wp term delete post_tag {}
Dikkat: Silme işlemi geri alınamaz. Önemli terimleri silmeden önce mutlaka bir yedek alın ya da en azından wp term list ile sileceklerinizi önce listeleyin.
Terim Meta Verileri
WordPress 4.4’ten itibaren terimler de meta veri depolayabiliyor. WooCommerce ürün kategorilerinde thumbnail image ID’si gibi bilgiler term meta olarak saklanır.
# Meta ekle
wp term meta add 15 "featured" "true"
# Meta oku
wp term meta get 15 "featured"
# Meta güncelle
wp term meta update 15 "featured" "false"
# Tüm meta verileri listele
wp term meta list 15
# Meta sil
wp term meta delete 15 "featured"
WooCommerce Kategori Thumbnail Ayarlama
WooCommerce’de ürün kategorilerine thumbnail (küçük resim) atamak için term meta kullanılır:
# Önce görseli medya kütüphanesine yükle
IMAGE_ID=$(wp media import /path/to/elektronik-banner.jpg --title="Elektronik Kategori Görseli" --porcelain)
# Ürün kategorisine thumbnail ata
CATEGORY_ID=$(wp term list product_cat --slug=elektronik --field=term_id)
wp term meta update $CATEGORY_ID "thumbnail_id" $IMAGE_ID
echo "Kategori $CATEGORY_ID için görsel $IMAGE_ID atandı."
Post Sayılarını Yeniden Hesaplama
Büyük veri aktarımları, eklenti çakışmaları ya da doğrudan veritabanı müdahaleleri sonrasında terimlerin post sayıları yanlış olabilir. wp term recount bu sorunu çözer:
# Kategorilerin post sayısını yeniden hesapla
wp term recount category
# Etiketleri de dahil et
wp term recount post_tag
# WooCommerce ürün kategorilerini güncelle
wp term recount product_cat
# Tüm taxonomy'leri güncelle (dikkatli kullan, yavaş çalışabilir)
wp taxonomy list --field=name | while read tax; do
echo "Yeniden sayılıyor: $tax"
wp term recount $tax
done
Gerçek Dünya Senaryoları
Senaryo 1: İçe Aktarma Sonrası Kategori Yapısı Oluşturma
Bir müşterinin eski sitesinden yeni WordPress kurulumuna geçiş yapıyorsunuz ve kategori yapısını script ile oluşturmanız gerekiyor:
#!/bin/bash
# Kategori yapısını oluşturan script
echo "Ana kategoriler oluşturuluyor..."
# Ana kategoriler
HABER_ID=$(wp term create category "Haberler" --slug=haberler --porcelain)
ANALIZ_ID=$(wp term create category "Analizler" --slug=analizler --porcelain)
REHBER_ID=$(wp term create category "Rehberler" --slug=rehberler --porcelain)
echo "Haberler ID: $HABER_ID"
echo "Analizler ID: $ANALIZ_ID"
echo "Rehberler ID: $REHBER_ID"
echo "Alt kategoriler oluşturuluyor..."
# Haberler alt kategorileri
wp term create category "Teknoloji Haberleri" --slug=teknoloji-haberleri --parent=$HABER_ID
wp term create category "Dünya Haberleri" --slug=dunya-haberleri --parent=$HABER_ID
wp term create category "Spor Haberleri" --slug=spor-haberleri --parent=$HABER_ID
# Analizler alt kategorileri
wp term create category "Piyasa Analizi" --slug=piyasa-analizi --parent=$ANALIZ_ID
wp term create category "Teknoloji Analizi" --slug=teknoloji-analizi --parent=$ANALIZ_ID
echo "Tüm kategoriler başarıyla oluşturuldu!"
wp term list category --fields=term_id,name,parent,slug
--porcelain parametresi komutun sadece oluşturulan terimin ID’sini döndürmesini sağlar, bu da script’lerde değişkene atama yaparken çok kullanışlıdır.
Senaryo 2: WooCommerce Ürün Attribute Yönetimi
WooCommerce’de ürün attribute’larının terimleri de wp term ile yönetilir. Örneğin renk seçenekleri:
#!/bin/bash
# Ürün renk attribute'u için terimleri toplu oluştur
RENKLER=("Siyah:siyah" "Beyaz:beyaz" "Kırmızı:kirmizi" "Mavi:mavi" "Yeşil:yesil" "Sarı:sari" "Gri:gri")
for RENK in "${RENKLER[@]}"; do
ISIM="${RENK%%:*}"
SLUG="${RENK##*:}"
echo "Renk oluşturuluyor: $ISIM ($SLUG)"
wp term create pa_color "$ISIM" --slug="$SLUG"
done
echo "Renk terimleri oluşturuldu:"
wp term list pa_color --fields=term_id,name,slug
Senaryo 3: Yinelenen Terimleri Tespit Etme
Uzun süreli sitelerde bazen aynı anlama gelen terimler farklı şekillerde eklenmiş olabilir. Bunları tespit edip birleştirmek gerekebilir:
#!/bin/bash
# Benzer slug'lara sahip terimleri listele
echo "Mevcut tüm etiketler:"
wp term list post_tag --fields=term_id,name,slug,count --orderby=name --order=ASC
echo ""
echo "Post içermeyen etiketler:"
wp term list post_tag --fields=term_id,name,count --hide_empty=false --format=csv | awk -F',' '$3 == 0 {print $1, $2}'
Senaryo 4: Terim Birleştirme (Merge)
WP-CLI’de doğrudan bir “merge terms” komutu yok ama bu işlemi adım adım yapabilirsiniz. Diyelim “javascript” ve “js” etiketlerini birleştirmek istiyorsunuz:
#!/bin/bash
# "js" etiketindeki postları "javascript" etiketine taşı
OLD_TERM_SLUG="js"
NEW_TERM_SLUG="javascript"
# ID'leri al
OLD_ID=$(wp term list post_tag --slug=$OLD_TERM_SLUG --field=term_id)
NEW_ID=$(wp term list post_tag --slug=$NEW_TERM_SLUG --field=term_id)
echo "Eski terim ID: $OLD_ID, Yeni terim ID: $NEW_ID"
# Eski etiketle işaretlenmiş postları bul
POST_IDS=$(wp post list --post_status=publish --tag=$OLD_TERM_SLUG --field=ID --format=ids)
# Her post için yeni etiketi ekle
for POST_ID in $POST_IDS; do
echo "Post $POST_ID işleniyor..."
wp post term add $POST_ID post_tag $NEW_ID
wp post term remove $POST_ID post_tag $OLD_ID
done
# Eski etiketi sil
wp term delete post_tag $OLD_ID
echo "Birleştirme tamamlandı!"
Performans İpuçları
Büyük sitelerle çalışırken wp term komutlarını daha verimli kullanmak için birkaç önerim var:
--quietparametresi: Toplu işlemlerde gereksiz çıktıyı bastırır, işlemi hızlandırır.--porcelainparametresi: Sadece oluşturulan nesnenin ID’sini döndürür, script’lerde kullanışlıdır.--format=ids: Sadece ID listesi alır, metin işleme için idealdir.- Çok sayıda terim oluşturacaksanız döngü yerine toplu işlem yapan bir SQL script’i veya CSV import eklentisi kullanmayı değerlendirin.
wp term recountyoğun saatlerden kaçınarak çalıştırın, büyük sitelerde bellek tükebilir.
Sık Yapılan Hatalar
- Taxonomy adını yanlış yazmak:
categoryyerinecategoriesyazmak çok yaygın bir hata. Doğru taxonomy adınıwp taxonomy listile kontrol edin. - Parent ID yerine slug vermek:
--parentparametresi integer (sayı) kabul eder, slug değil. - Çoklu site kurulumlarında yanlış site:
--url=site-adresiniz.comveya--blog-id=2parametresini unutmayın. - İzin sorunları: WP-CLI’yi web sunucu kullanıcısından farklı bir kullanıcı ile çalıştırırsanız dosya izin sorunları çıkabilir.
--allow-rootbazen gerekli olsa da production’da önerilmez.
Sonuç
wp term komutu, WordPress terim yönetimini komut satırı üzerinden yapmak isteyenler için son derece kapsamlı bir araç. Özellikle yeni site kurulumlarında kategori yapısını otomatik oluşturmak, büyük WooCommerce mağazalarında ürün kategorilerini ve attribute’larını toplu yönetmek ya da eski sitelerden veri geçişi yaparken terim yapısını yeniden kurmak gibi senaryolarda bu komutun değeri anlaşılıyor.
Tek tek admin panelinden yapmak yerine birkaç satır bash script ile onlarca terimi oluşturup yapılandırmak, hem zaman kazandırıyor hem de tekrarlanabilir bir süreç ortaya koyuyor. Özellikle çok sayıda benzer site yönetiyorsanız bu tür script’leri bir kez yazıp defalarca kullanabilirsiniz.
wp term‘i öğrendikten sonra wp post term, wp taxonomy gibi ilgili komutlara da göz atmanızı tavsiye ederim. Bunlar birlikte kullanıldığında WordPress’in içerik yapısını CLI üzerinden tam anlamıyla kontrol altına alabiliyorsunuz.
