WP CLI ile WordPress Yorum Yönetimi ve Toplu İşlemler

WordPress sitenizde yorum yönetimi zamanla gerçek bir kaosa dönüşebilir. Özellikle spam yorumlar, onay bekleyen yüzlerce yorum ve eski içeriklerdeki gereksiz tartışmalar birikmeye başladığında, WordPress admin panelinden tek tek uğraşmak saatlerinizi çalabilir. İşte tam bu noktada WP-CLI’nin wp comment komutu hayat kurtarıcı oluyor. Terminal üzerinden saniyeler içinde yapabileceğiniz işlemleri öğrendikten sonra, yorum yönetimini admin panelinden yapmak istemeyeceksiniz.

wp comment Komutuna Genel Bakış

wp comment komutu, WordPress yorumlarını komut satırından tam anlamıyla yönetmenizi sağlar. Yorum oluşturma, silme, güncelleme, onaylama, spam işaretleme ve toplu işlemler… Bunların hepsi tek bir komut ailesi altında toplanmış.

Komutun temel alt komutları şunlar:

  • create: Yeni yorum oluşturur
  • get: Belirli bir yorumun detaylarını getirir
  • list: Yorumları listeler, filtreler uygular
  • update: Var olan yorumu günceller
  • delete: Yorum siler
  • approve: Yorumu onaylar
  • unapprove: Yorum onayını geri alır
  • spam: Yorumu spam olarak işaretler
  • unspam: Spam işaretini kaldırır
  • trash: Yorumu çöp kutusuna taşır
  • untrash: Çöp kutusundan geri alır
  • count: Yorum sayısını döndürür
  • exists: Yorumun var olup olmadığını kontrol eder
  • meta: Yorum meta verilerini yönetir
  • recount: Yorum sayaçlarını yeniden hesaplar

Yorumları Listelemek ve Filtrelemek

Her şeyden önce, elinizdeki yorum durumunu anlamak gerekiyor. wp comment list komutu bu iş için biçilmiş kaftan.

# Tüm yorumları listele
wp comment list

# Sadece onay bekleyen yorumları listele
wp comment list --status=hold

# Spam yorumları listele
wp comment list --status=spam

# Çöp kutusundaki yorumları listele
wp comment list --status=trash

# Belirli bir yazıya ait yorumları listele
wp comment list --post_id=42

# Sadece onaylanmış yorumları, ID ve yazar bilgisiyle göster
wp comment list --status=approve --fields=comment_ID,comment_author,comment_date,comment_approved

Özellikle --fields parametresi çok kullanışlı. Terminalde geniş bir çıktı almak yerine sadece ihtiyacınız olan kolonları görebilirsiniz.

# Spam yorumların sadece ID'lerini al (toplu işlem için hazırlık)
wp comment list --status=spam --field=comment_ID

# Belirli bir tarih aralığındaki yorumları filtrele
wp comment list --after="2024-01-01" --before="2024-06-30" --status=hold

# Belirli bir yazar e-postasına ait yorumları bul
wp comment list --author_email="[email protected]"

Yorum sayısını öğrenmek için wp comment count komutunu kullanabilirsiniz:

# Tüm site genelinde yorum sayısını öğren
wp comment count

# Belirli bir yazıya ait yorum sayısı
wp comment count --post_id=42

Yorum Oluşturma ve Güncelleme

Test ortamlarında ya da içerik göçü sırasında yorum oluşturmanız gerekebilir. wp comment create komutu bunu mümkün kılıyor.

# Basit bir yorum oluştur
wp comment create 
  --comment_post_ID=15 
  --comment_author="Ahmet Yilmaz" 
  --comment_author_email="[email protected]" 
  --comment_content="Bu yazı gerçekten çok faydalı olmuş, teşekkürler." 
  --comment_approved=1

# Onay bekleyecek şekilde yorum oluştur
wp comment create 
  --comment_post_ID=15 
  --comment_author="Test Kullanici" 
  --comment_author_email="[email protected]" 
  --comment_content="Test yorumu" 
  --comment_approved=0

Var olan bir yorumu güncellemek için wp comment update kullanırsınız:

# Yorumun içeriğini güncelle
wp comment update 123 --comment_content="Güncellenmiş yorum içeriği buraya gelecek."

# Yorumun durumunu güncelle (1=onaylı, 0=beklemede)
wp comment update 123 --comment_approved=1

Onaylama ve Spam Yönetimi

Günlük yönetimde en çok kullanacağınız komutlar bunlar. Özellikle toplu onaylama ve spam temizleme senaryolarında WP-CLI gerçek farkı ortaya koyuyor.

# Tek bir yorumu onayla
wp comment approve 45

# Birden fazla yorumu aynı anda onayla
wp comment approve 45 67 89 102

# Yorumun onayını geri al
wp comment unapprove 45

# Yorumu spam olarak işaretle
wp comment spam 200

# Birden fazla yorumu spam işaretle
wp comment spam 200 201 202 203

# Spam işaretini kaldır
wp comment unspam 200

Gerçek dünyada karşılaşılan en yaygın senaryo şu: Bir akşam uyandığınızda 500 spam yorum birikiyor. Admin panelinden “tümünü seç ve sil” yapmak bile bazen takılıyor. WP-CLI ile bunu şöyle halledersiniz:

# Tüm spam yorumları toplu olarak sil
wp comment list --status=spam --field=comment_ID | xargs wp comment delete --force

# Ya da daha kontrollü bir yaklaşımla önce say, sonra sil
wp comment count
wp comment delete $(wp comment list --status=spam --field=comment_ID | tr 'n' ' ') --force

Toplu Silme İşlemleri

Silme işlemlerinde dikkatli olmak gerekiyor. WP-CLI varsayılan olarak yorumları çöp kutusuna taşır. Tamamen silmek için --force parametresini kullanmanız lazım.

# Yorumu çöp kutusuna taşı
wp comment trash 55

# Yorumu tamamen sil (geri alınamaz)
wp comment delete 55 --force

# Çöp kutusundaki tüm yorumları kalıcı olarak sil
wp comment list --status=trash --field=comment_ID | xargs wp comment delete --force

Büyük sitelerde binlerce yorumu silmek gerekebilir. Bu durumda MySQL üzerinden de gidebilirsiniz ama WP-CLI yolu çok daha güvenli çünkü WordPress kancalarını (hooks) tetikliyor ve ilgili meta verileri de temizliyor.

# Belirli bir yazıdaki tüm yorumları sil
wp comment list --post_id=99 --field=comment_ID | xargs wp comment delete --force

# 2020 yılından önceki onaylanmış tüm yorumları sil (dikkatli kullanın!)
wp comment list --status=approve --before="2020-01-01" --field=comment_ID | xargs wp comment delete --force

# Belirli bir e-postadan gelen tüm yorumları spam işaretle
wp comment list --author_email="spammer@kötüsite.com" --field=comment_ID | xargs wp comment spam

Gerçek Dünya Senaryosu: Site Göçü Sonrası Yorum Temizliği

Diyelim ki eski bir WordPress sitesini yeni sunucuya taşıdınız. İçerik göçü sırasında spam yorumlar da geldi. Sistematik bir temizlik şöyle yapılır:

#!/bin/bash
# Yorum temizlik scripti
SITE_PATH="/var/www/html/wordpress"

echo "=== Yorum Durumu Raporu ==="
wp --path=$SITE_PATH comment count

echo ""
echo "=== Spam Yorumlar Temizleniyor ==="
SPAM_COUNT=$(wp --path=$SITE_PATH comment list --status=spam --field=comment_ID | wc -l)
echo "$SPAM_COUNT spam yorum bulundu"

if [ $SPAM_COUNT -gt 0 ]; then
  wp --path=$SITE_PATH comment list --status=spam --field=comment_ID | 
    xargs wp --path=$SITE_PATH comment delete --force
  echo "Spam yorumlar silindi"
fi

echo ""
echo "=== Çöp Kutusu Temizleniyor ==="
TRASH_COUNT=$(wp --path=$SITE_PATH comment list --status=trash --field=comment_ID | wc -l)
echo "$TRASH_COUNT çöp kutusundaki yorum bulundu"

if [ $TRASH_COUNT -gt 0 ]; then
  wp --path=$SITE_PATH comment list --status=trash --field=comment_ID | 
    xargs wp --path=$SITE_PATH comment delete --force
  echo "Çöp kutusu temizlendi"
fi

echo ""
echo "=== Yorum Sayaçları Güncelleniyor ==="
wp --path=$SITE_PATH comment recount
echo "Tamamlandı!"

Bu scripti crontab’a ekleyerek düzenli temizlik de yapabilirsiniz:

# Her Pazar gece 02:00'de çalıştır
0 2 * * 0 /bin/bash /root/scripts/yorum-temizlik.sh >> /var/log/wp-yorum-temizlik.log 2>&1

Gerçek Dünya Senaryosu: Toplu Yorum Onaylama

Moderasyonlu bir site yönetiyorsunuz ve hafta sonu dışarıdaydınız. Pazartesi sabahı 200 yorum onay bekliyor. Hepsini tek tek onaylamak yerine:

# Önce bekleyen yorumların sayısını öğren
wp comment list --status=hold --format=count

# Belirli bir tarih aralığında bekleyen yorumları listele ve kontrol et
wp comment list --status=hold --after="2024-11-01" --fields=comment_ID,comment_author,comment_author_email,comment_content

# Güvenilir görünenleri toplu onayla
wp comment list --status=hold --field=comment_ID | xargs wp comment approve

# Sadece belirli bir yazıdaki bekleyen yorumları onayla
wp comment list --post_id=150 --status=hold --field=comment_ID | xargs wp comment approve

Daha gelişmiş bir kullanım: Belirli bir e-posta domain’inden gelen tüm yorumları güvenilir sayıp onaylamak. Bunu doğrudan WP-CLI ile yapamassınız ama bir script yazabilirsiniz:

#!/bin/bash
# Belirli bir domain'den gelen yorumları onayla
TRUSTED_DOMAIN="güvenilirsite.com"

wp comment list --status=hold --format=json | 
  python3 -c "
import json, sys
comments = json.load(sys.stdin)
for c in comments:
    if '$TRUSTED_DOMAIN' in c.get('comment_author_email', ''):
        print(c['comment_ID'])
" | xargs -r wp comment approve

Yorum Meta Verisi Yönetimi

Bazı eklentiler yorumlara meta veri ekler. WooCommerce’de ürün yorumları için rating bilgisi, bazı forum eklentilerinde ekstra alanlar gibi. wp comment meta ile bunları yönetebilirsiniz.

# Yorumun meta verilerini listele
wp comment meta list 123

# Belirli bir meta değerini al
wp comment meta get 123 rating

# Meta değeri ekle veya güncelle
wp comment meta update 123 rating 5

# Meta değeri sil
wp comment meta delete 123 rating

WooCommerce ürün yorumlarında rating değerini toplu güncellemek gerekirse:

# Rating'i olmayan yorumları bul ve varsayılan değer ata
wp comment list --post_type=product --field=comment_ID | while read ID; do
  RATING=$(wp comment meta get $ID rating 2>/dev/null)
  if [ -z "$RATING" ]; then
    wp comment meta add $ID rating 5
    echo "Yorum $ID için varsayılan rating eklendi"
  fi
done

Yorum Sayaçlarını Yeniden Hesaplama

Veritabanı onarımı, içerik göçü veya eklenti sorunları sonrasında WordPress’in gösterdiği yorum sayıları bazen hatalı olabilir. Yazı listesinde “0 yorum” görünmesine rağmen yorumlar var ya da tam tersi. Bunu düzeltmek için:

# Tüm site genelinde yorum sayaçlarını yeniden hesapla
wp comment recount

# Belirli bir yazı için yorum sayacını güncelle
wp post update 42 --comment_count=$(wp comment list --post_id=42 --status=approve --format=count)

wp comment recount komutu özellikle büyük toplu silme işlemlerinden sonra mutlaka çalıştırılmalı. Aksi halde yazı listesinde yanlış sayılar görünmeye devam eder.

Belirli Bir Yorumun Detaylarını Görüntüleme

Sorun giderme sırasında bir yorumun tam detaylarına bakmak gerekebilir:

# Yorumun tüm alanlarını göster
wp comment get 123

# Sadece belirli alanları göster
wp comment get 123 --fields=comment_ID,comment_author,comment_content,comment_approved,comment_date

# JSON formatında al (başka araçlarla işleme için)
wp comment get 123 --format=json

# Yorumun var olup olmadığını kontrol et
wp comment exists 123
echo "Çıkış kodu: $?"  # 0=var, 1=yok

Performans İpuçları: Büyük Sitelerde Toplu İşlemler

Binlerce yorumu olan bir sitede toplu işlemler yapıyorsanız, her şeyi tek seferde yapmak yerine parçalara bölmek daha güvenli.

# 1000'er yorum işle, her parça arasında 2 saniye bekle
BATCH_SIZE=1000
OFFSET=0

while true; do
  IDS=$(wp comment list --status=spam --number=$BATCH_SIZE --offset=$OFFSET --field=comment_ID)
  
  if [ -z "$IDS" ]; then
    echo "Tüm spam yorumlar işlendi"
    break
  fi
  
  echo "$IDS" | xargs wp comment delete --force
  echo "$BATCH_SIZE yorum silindi, devam ediliyor..."
  
  OFFSET=$((OFFSET + BATCH_SIZE))
  sleep 2
done

wp comment recount

Bu yaklaşım hem PHP memory limitini aşmaz hem de MySQL’i boğmaz. Production sunucularında toplu işlem yaparken bu tür önlemler almak, sitenin kesintisiz çalışması için kritik.

Sık Yapılan Hatalar ve Çözümleri

xargs ile boş liste sorunu: Eğer filtreye uyan hiç yorum yoksa, bazı sistemlerde xargs wp comment delete komutu hata üretebilir. Bunu önlemek için:

# --no-run-if-empty veya -r flag kullan
wp comment list --status=spam --field=comment_ID | xargs -r wp comment delete --force

Yanlış site için işlem yapmak: Çok siteli (multisite) WordPress kurulumlarında doğru siteyi belirtmeyi unutmayın:

# Multisite'da belirli bir site için işlem yap
wp comment list --url=alt-site.example.com --status=spam --field=comment_ID | 
  xargs -r wp comment delete --url=alt-site.example.com --force

Silinen yorumların yedeksiz gitmesi: Önemli toplu silme işlemlerinden önce yorum tablosunu yedekleyin:

# Sadece yorum tablolarını dışa aktar
wp db export --tables=$(wp db tables --scope=global --format=csv | grep comment) yorum-yedek.sql

wp comment ile Raporlama

Sistem yöneticisi olarak zaman zaman patron ya da müşteriye yorum istatistikleri sunmanız gerekebilir. WP-CLI bunu da kolaylaştırıyor:

#!/bin/bash
echo "=== WORDPRESS YORUM RAPORU ==="
echo "Tarih: $(date)"
echo ""
echo "Toplam Yorum Sayısı:"
wp comment count

echo ""
echo "Onaylanmış Yorum Sayısı:"
wp comment list --status=approve --format=count

echo ""
echo "Bekleyen Yorum Sayısı:"
wp comment list --status=hold --format=count

echo ""
echo "Spam Yorum Sayısı:"
wp comment list --status=spam --format=count

echo ""
echo "Çöp Kutusundaki Yorum Sayısı:"
wp comment list --status=trash --format=count

echo ""
echo "Son 7 Gündeki Yorumlar:"
wp comment list 
  --status=approve 
  --after="$(date -d '7 days ago' +%Y-%m-%d)" 
  --format=count

Bu scripti her gün çalıştırıp çıktısını bir dosyaya ya da e-postaya yönlendirebilirsiniz.

Sonuç

wp comment komutunun sunduğu imkanları bir kez deneyimlediğinizde, yorum yönetimi için WordPress admin paneline dönmek istemiyorsunuz. Saniyeler içinde yüzlerce spam yorumu temizlemek, otomatik temizlik scriptleri kurmak ve ayrıntılı raporlar üretmek, işinizi inanılmaz kolaylaştırıyor.

Özellikle şu kullanım senaryolarında WP-CLI olmadan yaşamak gerçekten zorlaşıyor: düzenli spam temizliği, site göçlerinde yorum yönetimi, çok siteli WordPress kurulumlarında merkezi yorum moderasyonu ve performans sorunlarını gidermek için yorum sayaçlarını sıfırlama.

Tüm bu komutları önce test ortamında deneyin. Özellikle --force ile silme işlemlerini production’da uygulamadan önce bir yedek almayı alışkanlık haline getirin. Ama bir kez iş akışınıza oturdu mu, wp comment hayatınızın vazgeçilmez bir parçası haline gelecek.

Bir yanıt yazın

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