WP CLI ile WordPress Medya Kütüphanesi Yönetimi ve Görselleri Yeniden Oluşturma

WordPress sitelerinde medya yönetimi, zamanla gerçek bir kaosa dönebilir. Yüzlerce, hatta binlerce resim, video ve dosya birikir; thumbnail’lar bozulur, eksik görüntüler ortaya çıkar, theme değiştirdiğinizde eski boyutlardaki resimler yeni tasarıma uymaz. İşte tam bu noktada WP-CLI’nin media komutu devreye girer ve sizi saatlerce sürecek manuel işlemlerden kurtarır.

Bu yazıda wp media komutunu tüm yönleriyle ele alacağız. Temel kullanımdan ileri düzey senaryolara, cron job entegrasyonundan toplu işlemlere kadar her şeyi pratiğe dökeceğiz.

wp media Nedir ve Neden Kullanmalıyız

WP-CLI’nin media alt komutu, WordPress medya kütüphanesini komut satırından yönetmenizi sağlar. Thumbnail yeniden oluşturma, dosya import etme, medya kayıtlarını listeleme gibi işlemleri admin paneline girmeden, hatta bazen admin panelinin çöktüğü durumlarda bile gerçekleştirebilirsiniz.

Admin paneli üzerinden medya işlemi yapmayı denediniz mi hiç? Birkaç yüz resim için bile tarayıcı zaman aşımına uğrar, sayfa donar, yarı kalmış işlemlerle baş başa kalırsınız. WP-CLI bu sorunun üstesinden tamamen gelir çünkü işlem doğrudan sunucu tarafında çalışır, herhangi bir HTTP timeout sınırlaması yoktur.

Temel wp media Komutları

wp media komutu birkaç alt komuttan oluşur:

  • wp media regenerate: Mevcut görseller için thumbnail’ları yeniden oluşturur
  • wp media import: Harici dosyaları veya URL’leri medya kütüphanesine ekler
  • wp media image-size: Kayıtlı resim boyutlarını listeler

Önce mevcut resim boyutlarını görmek iyi bir başlangıç noktasıdır:

wp media image-size

Bu komut sitenizde tanımlı tüm resim boyutlarını, genişlik, yükseklik ve kırpma ayarlarıyla birlikte listeler. Theme’inizin add_image_size() ile tanımladığı özel boyutlar da burada görünür.

wp media regenerate ile Thumbnail Yeniden Oluşturma

Tüm Görselleri Yeniden Oluşturma

En sık kullanılan senaryo: Theme değiştirdiniz veya yeni bir resim boyutu eklediniz ve tüm eski görsellerin thumbnail’larını yeniden oluşturmanız gerekiyor.

wp media regenerate --yes

--yes parametresi onay sorusunu atlayarak doğrudan işleme başlar. Büyük sitelerde bu işlem dakikalarca, hatta saatlerce sürebilir. Terminali kapatırsanız işlem durur, bu yüzden screen veya tmux kullanmanızı şiddetle öneririm:

screen -S media-regen
wp media regenerate --yes
# Ctrl+A, D ile screen'den ayrılın, işlem arka planda devam eder
screen -r media-regen  # Geri dönmek için

Belirli Görseller için Yeniden Oluşturma

Tüm medya kütüphanesini yeniden işlemek yerine sadece belirli ID’lere sahip görseller için işlem yapabilirsiniz:

wp media regenerate 123 456 789

Bu özellikle “şu belirli ürün görselleri bozulmuş” gibi spesifik durumlarda işe yarar. Bir müşteri sitenizin ürün sayfasında bozuk thumbnail’lardan şikayet ettiğinde, sorunlu medya ID’lerini bulup sadece onları yeniden işleyebilirsiniz.

Sadece Eksik Thumbnail’ları Oluşturma

Bu parametre gerçek dünya senaryolarında altın değerindedir. Tüm görselleri yeniden işlemek yerine sadece eksik olanları oluşturur:

wp media regenerate --only-missing

Diyelim ki sunucunuzda disk doldu, bir kısım thumbnail oluşturulamadı ve sonra diski genişlettiniz. Bu komutla sadece eksik parçaları tamamlarsınız, gereksiz yere var olan thumbnail’ları yeniden işlemezsiniz. Büyük sitelerde muazzam zaman tasarrufu sağlar.

Belirli Resim Boyutları için Yeniden Oluşturma

Yeni bir theme kurduğunuzda bazen sadece yeni eklenen boyutlar için thumbnail üretmeniz yeterlidir:

wp media regenerate --image_size=large

Birden fazla boyut için ayrı ayrı çalıştırabilirsiniz:

wp media regenerate --image_size=thumbnail
wp media regenerate --image_size=medium_large
wp media regenerate --image_size=woocommerce_single

WooCommerce kullanıyorsanız bu özellik kritik önem taşır. WooCommerce kendi özel resim boyutlarını tanımlar (woocommerce_thumbnail, woocommerce_single, woocommerce_gallery_thumbnail) ve bunları ayrı ayrı yeniden oluşturabilmek büyük kolaylık sağlar.

wp media import ile Medya İçe Aktarma

Dosya Sisteminden Import

Sunucunuzda bir dizinde duran görselleri medya kütüphanesine eklemek istediğinizde:

wp media import /var/www/uploads/migration/*.jpg

Bu komut belirtilen tüm JPG dosyalarını medya kütüphanesine ekler. Göç senaryolarında, eski siteden dışa aktardığınız görselleri yeni siteye aktarırken sıklıkla kullanılır.

URL’den Import

Uzak bir URL’deki görseli doğrudan medya kütüphanesine çekebilirsiniz:

wp media import https://example.com/wp-content/uploads/2024/01/ornek-gorsel.jpg

Birden fazla URL için bir liste dosyası oluşturup döngüyle işleyebilirsiniz:

while IFS= read -r url; do
    wp media import "$url"
done < gorsel-listesi.txt

Import Sırasında Post’a Bağlama

İçe aktarılan medyayı belirli bir yazıya veya sayfaya bağlamak için:

wp media import /path/to/image.jpg --post_id=42

Bu özellikle içerik taşıma projelerinde işe yarar. Eski sitedeki yazıların medyalarını yeni sitede doğru yazılara bağlayabilirsiniz.

Başlık ve Alt Text ile Import

wp media import /path/to/product-image.jpg 
    --title="Ürün Görseli - Kırmızı Tişört" 
    --alt="Kırmızı pamuklu tişört ürün fotoğrafı"

SEO açısından alt text önemlidir ve toplu import sırasında bunu otomatize etmek güzel bir pratik.

Gerçek Dünya Senaryoları

Senaryo 1: WooCommerce Theme Değişikliği Sonrası

Bir e-ticaret sitesinin theme’ini değiştirdiniz. Yeni theme farklı boyutlarda ürün görselleri istiyor ve 3000’den fazla ürün görseli var. Admin panelinden “Regenerate Thumbnails” eklentisi kullanmayı denediniz ama tarayıcı sürekli timeout veriyor.

Çözüm:

# Önce mevcut image size'ları kontrol edin
wp media image-size

# WooCommerce özel boyutlarını yeniden oluşturun
wp media regenerate --image_size=woocommerce_thumbnail --yes
wp media regenerate --image_size=woocommerce_single --yes
wp media regenerate --image_size=woocommerce_gallery_thumbnail --yes

# Genel boyutları da güncelleyin
wp media regenerate --image_size=medium --yes
wp media regenerate --image_size=large --yes

Bu yaklaşımla işlemi parçalara böldüğünüz için hangi boyutun ne kadar sürdüğünü takip edebilirsiniz. Bir şey hata verirse sadece o adımı tekrarlarsınız.

Senaryo 2: Sunucu Göçü Sonrası Eksik Thumbnail’lar

Siteyi eski sunucudan yenisine taşıdınız. Dosyaları rsync ile kopyaladınız ama bazı thumbnail’lar aktarım sırasında eksik kalmış. Hangi thumbnail’ların eksik olduğunu tek tek bulmak yerine:

# Eksik olanları tespit et ve oluştur
wp media regenerate --only-missing --yes 2>&1 | tee /tmp/media-regen-log.txt

# Sonucu kontrol et
tail -50 /tmp/media-regen-log.txt

Çıktıyı bir dosyaya kaydederek hangi görsellerin işlendiğini, hangilerinde hata oluştuğunu sonradan inceleyebilirsiniz.

Senaryo 3: Toplu Görsel Göçü – Eski Siteden Yeni Siteye

Eski bir site yenisine taşınıyor, görseller farklı bir sunucuda duruyor:

#!/bin/bash
# import-media.sh

OLD_SITE_URL="https://eski-site.com"
WP_PATH="/var/www/yeni-site"

# Eski sitedeki tüm medya URL'lerini al (bu kısmı kendi ihtiyacınıza göre düzenleyin)
wp --path="$WP_PATH" post list --post_type=attachment --fields=ID,guid --format=csv | 
tail -n +2 | 
while IFS=',' read -r id guid; do
    # Eski site URL'sini yeni URL ile değiştir
    old_url=$(echo "$guid" | sed "s|https://yeni-site.com|$OLD_SITE_URL|")
    echo "Import ediliyor: $old_url"
    wp --path="$WP_PATH" media import "$old_url" --skip-copy 2>/dev/null || echo "HATA: $old_url"
done

Senaryo 4: Cron ile Otomatik Medya Bakımı

Her ay çalışan ve eksik thumbnail’ları otomatik olarak tamamlayan bir cron job:

# crontab -e ile ekleyin
0 2 1 * * /usr/local/bin/wp --path=/var/www/site media regenerate --only-missing --yes >> /var/log/wp-media-regen.log 2>&1

Bu sayede thumbnail eksiklikleri aylık bakım döngüsünde otomatik olarak giderilir.

Performans ve Dikkat Edilmesi Gerekenler

Bellek Limiti Sorunları

Büyük görseller işlenirken PHP bellek limitine takılabilirsiniz. WP-CLI çalıştırmadan önce:

# PHP bellek limitini geçici olarak artırın
wp media regenerate --yes --memory=512M

# Ya da php.ini'yi geçici override ile çalıştırın
php -d memory_limit=512M /usr/local/bin/wp media regenerate --yes

İşlem Sırasında Sunucu Yükü

3000 görsel işliyorsanız sunucu yükü ciddi ölçüde artacaktır. Bunu yönetmek için nice komutunu kullanın:

nice -n 19 wp media regenerate --yes

nice -n 19 komutu işleme en düşük önceliği verir, böylece site ziyaretçileri işlemden etkilenmez. Tabii bu durumda işlem daha uzun sürer ama bu makul bir takas.

Alternatif olarak, yoğun olmayan saatlere alabilirsiniz:

# Gece 3'te çalışacak şekilde at komutuyla zamanlayın
echo "nice -n 19 wp --path=/var/www/site media regenerate --yes" | at 03:00

İlerlemeyi Takip Etme

wp media regenerate komutu varsayılan olarak ilerlemeyi gösterir ama bunu daha ayrıntılı loglamak isterseniz:

wp media regenerate --yes 2>&1 | while IFS= read -r line; do
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $line"
done | tee /var/log/media-regenerate-$(date +%Y%m%d).log

Bu script her satıra timestamp ekleyerek loglar, hem terminalde görebilirsiniz hem de dosyaya kaydedilir.

Hata Ayıklama ve Sorun Giderme

“The image does not exist” Hatası

Bu hata fiziksel dosyanın diskten silindiği ama veritabanı kaydının hala durduğu durumlarda çıkar. Önce bu kayıtları temizlemek gerekir:

# Hangi medyaların fiziksel dosyası olmadığını bul
wp media regenerate --yes 2>&1 | grep "does not exist"

Sonrasında bu kayıtları veritabanından temizlemek için bir script yazılabilir ama bunu dikkatli yapın, önce yedek alın.

GD veya Imagick Sorunları

Thumbnail oluşturulamazsa genellikle GD ya da Imagick kütüphanesi sorundur:

# WordPress'in hangi image editing library'yi kullandığını kontrol edin
wp eval 'echo get_class(WP_Image_Editor::get_implementation(array()));'

# PHP GD bilgisini kontrol edin
php -r "print_r(gd_info());"

Imagick kullanmak daha iyi sonuç verir, eğer GD kullanıyorsa ve sorun yaşıyorsanız Imagick’i yükleyip etkinleştirmek fark yaratabilir.

Büyük Sitelerde Kısmi İşlem

10.000’den fazla medya dosyası olan sitelerde tüm işlemi bir seferde çalıştırmak yerine ID aralıklarıyla parça parça ilerlemek daha güvenlidir:

#!/bin/bash
# Medya ID'lerini 500'erli gruplar halinde işle
BATCH_SIZE=500
START_ID=1

# Toplam medya sayısını al
TOTAL=$(wp media regenerate --dry-run --yes 2>/dev/null | grep -oP 'd+(?= images)')

wp post list --post_type=attachment --fields=ID --format=ids | 
tr ' ' 'n' | 
split -l $BATCH_SIZE - /tmp/media-batch-

for batch_file in /tmp/media-batch-*; do
    IDS=$(cat "$batch_file" | tr 'n' ' ')
    echo "İşleniyor: $batch_file"
    wp media regenerate $IDS --yes
    sleep 2  # Sunucuya nefes aldır
    rm "$batch_file"
done

Medya Kütüphanesi Bakım Checklist’i

Düzenli olarak yapmanız gereken medya bakım işlemlerini bir araya getirelim:

#!/bin/bash
# wp-media-maintenance.sh
# Her ayın başında çalıştırılacak medya bakım scripti

WP_PATH="/var/www/site"
LOG_FILE="/var/log/wp-media-maintenance-$(date +%Y%m).log"

echo "=== Medya Bakımı Başladı: $(date) ===" >> "$LOG_FILE"

# 1. Eksik thumbnail'ları tamamla
echo "Eksik thumbnail'lar oluşturuluyor..." >> "$LOG_FILE"
nice -n 19 wp --path="$WP_PATH" media regenerate --only-missing --yes >> "$LOG_FILE" 2>&1

# 2. Mevcut image size'ları logla
echo "Kayıtlı image size'lar:" >> "$LOG_FILE"
wp --path="$WP_PATH" media image-size >> "$LOG_FILE" 2>&1

# 3. Toplam medya sayısını logla
MEDIA_COUNT=$(wp --path="$WP_PATH" post list --post_type=attachment --format=count)
echo "Toplam medya sayısı: $MEDIA_COUNT" >> "$LOG_FILE"

echo "=== Medya Bakımı Tamamlandı: $(date) ===" >> "$LOG_FILE"
echo "Bakım tamamlandı. Log: $LOG_FILE"

Sonuç

wp media komutu, WordPress medya yönetiminde gerçek bir güç aracıdır. Özellikle büyük sitelerde, theme değişikliklerinde ve sunucu göçlerinde admin panelinin sınırlarını aşmanın en temiz yolu budur.

Özetlemek gerekirse en kritik kullanım pratiklerini şöyle sıralayabiliriz:

  • Theme değişikliklerinden sonra mutlaka wp media regenerate --yes çalıştırın
  • Sunucu göçlerinde --only-missing parametresi ile eksik thumbnail’ları tamamlayın
  • Büyük sitelerde işlemi screen veya tmux içinde çalıştırın, terminal kapandığında işlem durmasın
  • Sunucu yükünü kontrol altında tutmak için nice -n 19 kullanın
  • Tüm işlemleri loglamayı alışkanlık edinin, bir şeyler ters gittiğinde geriye dönüp bakabilin

WP-CLI’yi medya yönetimine dahil ettiğinizde, daha önce saatler alan işlemlerin otomatik ve sorunsuz çalıştığını göreceksiniz. Bu da sizi asıl önemli olan işlere odaklanmak için serbest bırakır.

Bir yanıt yazın

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