WP CLI ile wp option Komutu: WordPress Ayarlarını Okuma ve Değiştirme
WordPress sitelerini yönetirken en can sıkıcı şeylerden biri, küçük bir ayar değişikliği için admin paneline girmek, doğru menüyü bulmak ve formu kaydetmektir. Üstelik bu işlemi onlarca site için yapıyorsanız, saçlarınızı yolmak istediğinizi anlıyorum. WP-CLI’nin wp option komutu tam bu noktada hayat kurtarır. Veritabanındaki wp_options tablosunu komut satırından okuyup değiştirebilirsiniz, hem de scriptlerinize gömülü şekilde.
wp option Nedir ve Neden Önemlidir?
WordPress, site ayarlarının büyük çoğunluğunu wp_options tablosunda saklar. Site başlığından aktif tema adına, e-posta adresinden zaman dilimine kadar her şey burada. WooCommerce kurulunca yüzlerce yeni option kaydı ekler. Güvenlik eklentileri, önbellek eklentileri, builder araçları da aynı tabloyu kullanır.
wp option komutu, bu tablonun üzerinde CRUD operasyonları yapmanızı sağlar. MySQL komutlarına gerek kalmadan, PHP bilmeden, admin paneli açmadan. Özellikle şu durumlarda vazgeçilmez olur:
- Toplu site kurulumlarında standart ayarları otomatik uygulamak
- Staging’den canlıya geçişte ayarları senkronize etmek
- Kırık bir sitede admin paneline giremeden ayarları düzeltmek
- CI/CD pipeline’larında WordPress konfigürasyonunu yönetmek
- Çok sayıda WooCommerce sitesinde fiyat veya para birimi güncellemek
Temel Komutlar ve Söz Dizimi
wp option komutunun alt komutları oldukça anlaşılır bir yapıya sahip. Hepsini sırasıyla inceleyelim.
Ayar Okuma: wp option get
En basit kullanım, bir option’ın değerini okumaktır:
wp option get siteurl
wp option get blogname
wp option get admin_email
Bu üç komut sırasıyla site URL’sini, site başlığını ve admin e-posta adresini döndürür. Çıktı terminal’e düz metin olarak gelir.
Serialized (PHP serialize edilmiş) verileri okumak için --format parametresi kullanabilirsiniz:
wp option get active_plugins --format=json
Aktif eklentilerin listesi JSON formatında gelir, insan tarafından okunabilir şekilde. --format=yaml da çalışır, YAML tercih edenler için.
Ayar Oluşturma: wp option add
Yeni bir option eklemek için add kullanılır. Option zaten varsa hata verir, bu sayede yanlışlıkla üzerine yazmazsınız:
wp option add my_custom_setting "değer123"
--autoload parametresi önemlidir. WordPress her sayfa yüklenişinde autoload değeri yes olan option’ları veritabanından çeker. Performans açısından kritik:
wp option add my_heavy_setting "büyük_veri" --autoload=no
Büyük ve nadiren değişen verileri autoload=no yapmanız sayfa yükleme sürelerini olumlu etkiler.
Ayar Güncelleme: wp option update
Var olan bir option’ı güncellemek için:
wp option update blogname "Yeni Site Başlığım"
wp option update admin_email "[email protected]"
wp option update blogdescription "Teknoloji ve Linux üzerine notlar"
Option yoksa otomatik oluşturur, bu yönüyle add‘dan farklıdır. Yani bir ayarın var olup olmadığından emin değilseniz update daha güvenlidir.
Ayar Silme: wp option delete
wp option delete my_custom_setting
Dikkatli kullanın. Core WordPress option’larını silmek siteyi bozabilir.
Tüm Option’ları Listeleme: wp option list
Bu komut gerçekten güçlüdür:
wp option list
wp_options tablosundaki her şeyi döker. Yüzlerce satır olabilir. Filtrelemek için:
wp option list --search="woocommerce_*"
wp option list --search="*_version"
wp option list --autoload=yes --format=json
--search parametresi wildcard destekler. WooCommerce’e ait tüm option’ları görmek istiyorsanız ilk komut işinizi görür.
Gerçek Dünya Senaryoları
Senaryo 1: Yeni Site Kurulumunu Otomatize Etme
Müşterilere her ay 5-10 yeni WordPress sitesi kuruyorsanız, temel ayarları bir script ile otomatik uygulamak büyük zaman kazandırır:
#!/bin/bash
# Yeni site temel ayarları
SITE_PATH="/var/www/yeni-site"
ADMIN_EMAIL="[email protected]"
SITE_TITLE="Müşteri Sitesi"
SITE_URL="https://yeni-musteri.com"
cd $SITE_PATH
# Temel site bilgileri
wp option update siteurl "$SITE_URL"
wp option update home "$SITE_URL"
wp option update blogname "$SITE_TITLE"
wp option update admin_email "$ADMIN_EMAIL"
# Zaman dilimi ve dil
wp option update timezone_string "Europe/Istanbul"
wp option update date_format "d.m.Y"
wp option update time_format "H:i"
wp option update start_of_week 1
# Yorumlar kapalı (blog değilse)
wp option update default_comment_status "closed"
wp option update default_ping_status "closed"
# Arama motorlarına izin
wp option update blog_public 1
# Güvenlik: dosya düzenleme kapalı
wp option add disallow_file_edit 1
echo "Temel ayarlar uygulandı."
Bu scripti çalıştırdığınızda dakikalar içinde standart bir başlangıç noktasına sahip olursunuz.
Senaryo 2: WooCommerce Para Birimi Güncelleme
Döviz kurları değişti, para birimi sembolü veya konumu güncellemek gerekiyor. Admin paneline girmek yerine:
# Mevcut para birimi ayarlarını kontrol et
wp option get woocommerce_currency
wp option get woocommerce_currency_pos
wp option get woocommerce_price_decimal_sep
wp option get woocommerce_price_thousand_sep
# Türk Lirası ayarları
wp option update woocommerce_currency "TRY"
wp option update woocommerce_currency_pos "right_space"
wp option update woocommerce_price_decimal_sep ","
wp option update woocommerce_price_thousand_sep "."
wp option update woocommerce_price_num_decimals 2
echo "Para birimi ayarları güncellendi."
woocommerce_currency_pos için geçerli değerler: left, right, left_space, right_space. Türkçe kullanımda right_space en yaygın tercihtir: “1.250,00 ₺” formatı için.
Senaryo 3: Staging’den Canlıya URL Geçişi
Staging ortamında geliştirme yaptınız, canlıya alıyorsunuz. URL’ler staging.sitesim.com olan, www.sitesim.com olması gereken:
#!/bin/bash
OLD_URL="https://staging.sitesim.com"
NEW_URL="https://www.sitesim.com"
cd /var/www/html
# Ana URL'leri güncelle
wp option update siteurl "$NEW_URL"
wp option update home "$NEW_URL"
# İçerik içindeki URL'leri de değiştir (post içerikleri, meta veriler)
wp search-replace "$OLD_URL" "$NEW_URL" --skip-columns=guid
# WooCommerce varsa, mağaza URL'lerini kontrol et
if wp plugin is-active woocommerce; then
wp option update woocommerce_store_address_1 "Gerçek Adres"
echo "WooCommerce mağaza adresi güncellendi."
fi
# Önbelleği temizle
wp cache flush
wp transient delete --all
echo "URL geçişi tamamlandı: $OLD_URL -> $NEW_URL"
Senaryo 4: Bakım Modu ve Acil Müdahale
Site çöktü, veritabanına erişim var ama admin paneli açılmıyor. Bakım modunu açmak veya hata ayıklamayı aktif etmek için:
# Hata ayıklamayı aç (wp-config.php yerine, bazı durumlarda option ile kontrol edilir)
# Aktif temayı kontrol et
wp option get template
wp option get stylesheet
# Eğer tema soruna yol açıyorsa, default temaya geç
wp option update template "twentytwentyfour"
wp option update stylesheet "twentytwentyfour"
# Aktif eklentileri göster
wp option get active_plugins --format=json
# Tüm eklentileri geçici olarak devre dışı bırak (acil durumda)
wp option update active_plugins '[]' --format=json
Son komuta dikkat edin. Tüm eklentileri kapatır. Sorunu çözdükten sonra eklentileri tek tek aktif etmeyi unutmayın.
Senaryo 5: Autoload Optimizasyonu
Büyük bir sitede sayfa yüklemeleri yavaşladı, wp_options tablosundaki autoload verisi şişmiş olabilir:
# Toplam autoload boyutunu kontrol et (MySQL ile)
wp db query "SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes'"
# Hangi option'lar en büyük yer kaplıyor?
wp db query "SELECT option_name, LENGTH(option_value) as size FROM wp_options WHERE autoload='yes' ORDER BY size DESC LIMIT 20"
# Şişmiş ve gereksiz option'ları autoload=no yap
wp option update woocommerce_session_tokens "" --autoload=no
wp option update _transient_feed_* "" --autoload=no
# Transient'ları temizle (bunlar autoload'u şişirir)
wp transient delete --all
# Belirli bir eklentinin bıraktığı gereksiz option'ları bul
wp option list --search="eski_eklenti_*"
Bu analiz, performans sorunlarının kök nedenini bulmada çok işe yarar. 500KB+ autoload verisi ciddi yavaşlamalara yol açar.
Gelişmiş Kullanım: JSON ve Serialized Veri
Bazı option’lar karmaşık veri yapıları içerir. WooCommerce’in çekim yöntemleri veya e-posta şablonları gibi. Bu verileri güncellemek biraz daha dikkat ister:
# Karmaşık bir option'ı okuyalım
wp option get woocommerce_email_from_name
wp option get woocommerce_email_from_address
# JSON veri içeren option'ı güncelle
wp option update woocommerce_cod_settings
'{"enabled":"yes","title":"Kapıda Ödeme","description":"Teslimat sırasında ödeme yapın."}'
--format=json
# Serialized array güncellemek için önce oku, sonra güncelle
CURRENT=$(wp option get my_plugin_settings --format=json)
echo $CURRENT
# Yeni değeri ayarla
wp option update my_plugin_settings
'{"api_key":"yeni_anahtar","debug":false,"cache_time":3600}'
--format=json
--format=json parametresi olmadan JSON string verirseniz, WP-CLI düz metin olarak kaydeder. Eklenti PHP ile bu veriyi json_decode bekliyorsa sorun çıkar. Her zaman --format=json kullanın.
Çoklu Site (Multisite) Kullanımı
WordPress Multisite kurulumlarında her alt sitenin kendi option tablosu olabilir. --url parametresi ile hedef siteyi belirtin:
# Ana site option'ı
wp option get blogname
# Alt site option'ı (URL ile)
wp --url="altsitem.ana-site.com" option get blogname
wp --url="altsitem.ana-site.com" option update blogname "Alt Site Yeni Başlığı"
# Tüm alt sitelere aynı ayarı uygulamak için
wp site list --field=url | while read SITE_URL; do
wp --url="$SITE_URL" option update timezone_string "Europe/Istanbul"
echo "$SITE_URL -> timezone güncellendi"
done
Bu döngü, Multisite ağındaki tüm siteleri dolaşarak her birine zaman dilimini günceller. Onlarca site için bunu admin panelinden yapmayı düşününce fark ortaya çıkar.
Güvenlik Kontrolü için wp option Kullanımı
Sitenizin güvenlik açıklarını komut satırından da kontrol edebilirsiniz:
# Kullanıcı kaydı açık mı?
wp option get users_can_register
# Yeni kullanıcıların varsayılan rolü
wp option get default_role
# Ping ve trackback durumu
wp option get default_ping_status
wp option get default_pingback_flag
# XML-RPC ile ilgili ayarları kontrol et
wp option get enable_xmlrpc 2>/dev/null || echo "Bu option yok, eklenti veya wp-config ile yönetiliyor"
# Güvenli değerleri zorla
wp option update users_can_register 0
wp option update default_role "subscriber"
wp option update default_ping_status "closed"
wp option update default_comment_status "closed"
Düzenli Güvenlik Denetimi Scripti
#!/bin/bash
# Haftalık güvenlik denetimi
SITE_PATH="/var/www/html"
LOG_FILE="/var/log/wp_security_audit.log"
DATE=$(date '+%Y-%m-%d %H:%M')
cd $SITE_PATH
echo "=== Güvenlik Denetimi: $DATE ===" >> $LOG_FILE
# Kullanıcı kaydı kontrolü
REGISTRATION=$(wp option get users_can_register)
if [ "$REGISTRATION" = "1" ]; then
echo "UYARI: Kullanıcı kaydı açık!" >> $LOG_FILE
fi
# Admin e-posta kontrolü
ADMIN_EMAIL=$(wp option get admin_email)
echo "Admin email: $ADMIN_EMAIL" >> $LOG_FILE
# Aktif eklenti sayısı
PLUGIN_COUNT=$(wp plugin list --status=active --format=count)
echo "Aktif eklenti sayısı: $PLUGIN_COUNT" >> $LOG_FILE
echo "Denetim tamamlandı." >> $LOG_FILE
Bu scripti cron’a ekleyip haftalık çalıştırabilirsiniz.
Sık Kullanılan Option İsimleri
Aşağıdaki option isimleri günlük sysadmin işlerinde en çok karşılaşacaklarınız:
- siteurl: WordPress kurulum URL’si
- home: Ana sayfa URL’si (siteurl’den farklı olabilir)
- blogname: Site başlığı
- blogdescription: Site tagline’ı
- admin_email: Yönetici e-posta adresi
- blogpublic: Arama motorlarına görünürlük (1/0)
- timezone_string: Zaman dilimi (Europe/Istanbul gibi)
- date_format: Tarih görüntüleme formatı
- time_format: Saat görüntüleme formatı
- active_plugins: Aktif eklenti listesi (serialized array)
- template: Aktif ana tema dizin adı
- stylesheet: Aktif çocuk tema dizin adı
- permalink_structure: Kalıcı bağlantı yapısı (/sample-post/ gibi)
- upload_path: Medya yükleme dizini
- woocommerce_currency: WooCommerce para birimi kodu
- woocommerce_shop_page_id: WooCommerce mağaza sayfası ID’si
Hata Durumları ve Çözümler
“Error: Could not get option” hatası: Option mevcut değildir. wp option add ile oluşturun veya ismi kontrol edin.
Serialized veri bozulması: Option’ı doğrudan MySQL ile güncellerseniz serialization bozulur. Her zaman wp option update kullanın, MySQL UPDATE sorgusu yazmayın.
Multisite’da yanlış tablo: --url parametresi vermezseniz ana sitenin option’ları üzerinde çalışırsınız. Alt site option’ları farklı tablolardadır (wp_2_options, wp_3_options gibi).
Değişiklik etkili olmadı: Önbellek aktifse eski değeri görebilirsiniz. wp cache flush ile önbelleği temizleyin.
Sonuç
wp option komutu, WordPress yönetiminde gerçek anlamda iş akışınızı dönüştürür. Özellikle birden fazla site yöneten, otomasyona değer veren veya terminal odaklı çalışmayı tercih eden sysadminler için vazgeçilmez bir araçtır.
En pratik önerim: sık yaptığınız ayar değişikliklerini küçük bash scriptlerine dönüştürün. Yeni site kurulumu, staging-canlı geçişi, WooCommerce para birimi güncelleme gibi rutin işlemler için hazır scriptleriniz olsun. Hem zaman kazanırsınız, hem de insan hatası riskini minimize edersiniz.
Bir sonraki adım olarak wp option list --search ile mevcut sitenizin option tablosunu keşfetmenizi öneririm. Hangi eklentilerin ne kadar veri bıraktığını gördüğünüzde şaşırabilirsiniz. O bilgi, hem performans optimizasyonu hem de kullanılmayan eklentilerin tespiti için çok değerlidir.
