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-missingparametresi ile eksik thumbnail’ları tamamlayın - Büyük sitelerde işlemi
screenveyatmuxiçinde çalıştırın, terminal kapandığında işlem durmasın - Sunucu yükünü kontrol altında tutmak için
nice -n 19kullanı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.
