WP CLI ile WordPress Kenar Çubuğu Yönetimi
WordPress sitelerini yönetirken en çok zaman kaybettiren konulardan biri kenar çubuklarını düzenlemektir. Özellikle birden fazla siteniz varsa veya bir müşteri sitesini uzaktan yönetiyorsanız, admin paneline giriş yapıp sürükle-bırak ile uğraşmak ciddi zaman kaybı oluşturur. İşte tam burada WP CLI devreye giriyor. wp sidebar komutu ile kenar çubuklarını komut satırından yönetebilir, betikler yazabilir ve süreçleri otomatize edebilirsiniz.
Bu yazıda WP CLI’nin wp sidebar komutunu gerçek dünya senaryolarıyla birlikte ele alacağız. Hem yeni başlayanlar hem de WP CLI konusunda deneyimli sysadminler için faydalı olacak örnekler paylaşacağım.
wp sidebar Nedir ve Ne İşe Yarar?
WordPress’te kenar çubukları (sidebar), temanızın register_sidebar() fonksiyonu ile tanımladığı widget alanlarıdır. Bunlar yalnızca sol/sağ kenar çubuklarıyla sınırlı değildir. Footer widget alanları, header widget alanları, içerik altı widget alanları da teknik olarak “sidebar” kategorisine girer.
wp sidebar komutu bu alanları listelemek için kullanılır. Evet, yalnızca listeleme. Şunu açıkça belirtmek gerekiyor: wp sidebar başlı başına bir kenar çubuğu yönetim aracı değildir. Asıl güç, wp widget komutuyla birlikte gelir. Ancak kenar çubuğu yönetimini anlamak için önce wp sidebar ile mevcut alanları tanımlamak şarttır.
WP CLI’yi henüz kurmadıysanız şu komutla kurabilirsiniz:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info
Mevcut Kenar Çubuklarını Listeleme
WordPress kurulumunuzdaki tüm kayıtlı kenar çubuklarını görmek için temel komut şudur:
wp sidebar list
Bu komut size şu bilgileri verir:
- name: Kenar çubuğunun görünen adı
- id: Programatik olarak kullanacağınız benzersiz kimlik
- description: Kenar çubuğunun açıklaması
- class: CSS sınıfı
- before_widget: Widget öncesi HTML
- after_widget: Widget sonrası HTML
- before_title: Başlık öncesi HTML
- after_title: Başlık sonrası HTML
- status:
activeveyainactivedurumu - widgets: Kenar çubuğundaki widget sayısı
Çıktıyı daha okunabilir hale getirmek için --format parametresini kullanabilirsiniz:
wp sidebar list --format=json
wp sidebar list --format=csv
wp sidebar list --format=yaml
Özellikle kenar çubuğu ID’lerini hızlıca almak istiyorsanız şu komutu kullanın:
wp sidebar list --fields=id,name,status --format=table
Bu size temiz ve düzenli bir çıktı verir. Birden fazla siteyi yönetirken hangi kenar çubuğunun hangi ID’ye sahip olduğunu bilmek kritik önem taşır.
Belirli Bir Kenar Çubuğundaki Widget’ları Görme
Bir kenar çubuğunda hangi widget’ların olduğunu görmek için wp widget list komutunu kullanırsınız:
wp widget list sidebar-1
Daha fazla alan görmek isterseniz:
wp widget list sidebar-1 --fields=id,name,position,options
Bu komut size kenar çubuğundaki widget’ların ID’lerini, isimlerini, sıralarını ve ayarlarını gösterir. Sysadmin olarak bir sitenin widget yapısını belgelemek veya sorun gidermek için bu çıktı son derece değerlidir.
Gerçek Dünya Senaryosu 1: Widget Ekleme
Diyelim ki bir WooCommerce sitesinde mağaza kenar çubuğuna arama widget’ı eklemek istiyorsunuz. Admin paneli yerine doğrudan komut satırından yapabilirsiniz:
# Önce mevcut kenar çubuklarını listele
wp sidebar list --fields=id,name
# WooCommerce shop sidebar'ına arama widget'ı ekle
wp widget add search woocommerce_sidebar 1 --title="Ürün Ara"
Buradaki parametreler şunlardır:
- search: Eklenecek widget türü
- woocommerce_sidebar: Hedef kenar çubuğunun ID’si
- 1: Widget’ın pozisyonu (1 = en üst)
- –title: Widget başlığı
WooCommerce sitelerinde sık kullanılan widget ekleme örnekleri:
# Ürün kategorileri widget'ı ekle
wp widget add wc_product_categories woocommerce_sidebar 1 --title="Kategoriler" --count=1 --hierarchical=1
# Son ürünler widget'ı ekle
wp widget add woocommerce_recently_viewed woocommerce_sidebar 2 --title="Son Görüntülenenler"
# Fiyat filtresi ekle
wp widget add woocommerce_price_filter woocommerce_sidebar 3 --title="Fiyat Filtresi"
Gerçek Dünya Senaryosu 2: Widget Taşıma ve Yeniden Sıralama
Bir müşteri “kenar çubuğundaki kategoriler widget’ı en üste gelsin” dediğinde admin panelinde sürükle-bırak yapmak yerine şunu yapabilirsiniz:
# Önce mevcut widget'ları ve pozisyonlarını gör
wp widget list sidebar-1 --fields=id,name,position
# Kategoriler widget'ını birinci sıraya taşı
wp widget move 5 --position=1
# Veya başka bir sidebar'a taşı
wp widget move 5 --sidebar-id=sidebar-2 --position=1
Bu özellik özellikle tema değişikliği sonrasında widget’ları yeniden düzenlerken işe yarar. Bir temadan diğerine geçerken widget yapısını korumak istiyorsanız, eski temadaki widget’ları not alıp yeni temaya programatik olarak ekleyebilirsiniz.
Gerçek Dünya Senaryosu 3: Widget Silme ve Temizleme
Bir siteyi devraldığınızda kenar çubuğu genellikle gereksiz widget’larla dolu olur. Tek tek silmek yerine toplu temizlik yapabilirsiniz:
# Belirli bir widget'ı sil
wp widget delete 7
# Birden fazla widget'ı aynı anda sil
wp widget delete 7 8 9 10
# Bir kenar çubuğundaki TÜM widget'ları sil (dikkatli kullanın!)
wp widget list sidebar-1 --field=id | xargs wp widget delete
Son komut oldukça güçlüdür. wp widget list ile ID’leri alıp xargs ile wp widget delete komutuna pipe etmek, kenar çubuğunu tamamen temizlemenin en hızlı yoludur. Ancak bu işlemi yapmadan önce mutlaka yedek alın.
Toplu Site Yönetimi: Çoklu WordPress Kurulumu
Gerçek sysadmin işi burada başlıyor. Aynı sunucuda 20 WordPress sitesi yönetiyorsanız ve hepsinin ana kenar çubuğuna aynı widget’ı eklemeniz gerekiyorsa ne yaparsınız?
#!/bin/bash
# Tüm WordPress sitelerine arama widget'ı ekle
SITES=(
"/var/www/site1"
"/var/www/site2"
"/var/www/site3"
"/var/www/site4"
)
for SITE in "${SITES[@]}"; do
echo "İşleniyor: $SITE"
# Sitenin aktif sidebar'larını kontrol et
SIDEBARS=$(wp --path="$SITE" sidebar list --field=id --status=active)
if [ -n "$SIDEBARS" ]; then
# Ana sidebar'a arama widget'ı ekle
wp --path="$SITE" widget add search sidebar-1 1
--title="Arama"
--allow-root 2>/dev/null
echo "Widget eklendi: $SITE"
else
echo "Aktif sidebar bulunamadı: $SITE"
fi
done
echo "Tüm işlemler tamamlandı."
Bu betik her siteye gidip aktif kenar çubuklarını kontrol eder ve arama widget’ını ekler. --allow-root parametresini root kullanıcısıyla çalışıyorsanız eklemeniz gerekir.
Widget Konfigürasyonunu Dışa ve İçe Aktarma
Bir sitenin kenar çubuğu yapısını başka bir siteye kopyalamak istediğinizde WP CLI ve JSON formatı büyük kolaylık sağlar.
# Mevcut sidebar konfigürasyonunu JSON olarak dışa aktar
wp widget list sidebar-1 --format=json > sidebar_backup.json
# İçeriği incele
cat sidebar_backup.json | python3 -m json.tool
Ancak bu yöntemin bir sınırı var: Doğrudan import komutu yok. Bu yüzden dışa aktardığınız JSON’ı okuyup widget’ları yeniden oluşturan bir betik yazmanız gerekiyor:
#!/bin/bash
# sidebar_backup.json dosyasındaki widget yapısını hedef siteye uygula
TARGET_PATH="/var/www/hedef-site"
TARGET_SIDEBAR="sidebar-1"
# Her widget için manuel ekleme
wp --path="$TARGET_PATH" widget add search "$TARGET_SIDEBAR" 1
--title="Site İçinde Ara"
wp --path="$TARGET_PATH" widget add categories "$TARGET_SIDEBAR" 2
--title="Kategoriler"
--count=1
--hierarchical=1
--dropdown=0
wp --path="$TARGET_PATH" widget add recent-posts "$TARGET_SIDEBAR" 3
--title="Son Yazılar"
--number=5
wp --path="$TARGET_PATH" widget add tag_cloud "$TARGET_SIDEBAR" 4
--title="Etiketler"
--taxonomy=post_tag
echo "Sidebar yapısı hedef siteye uygulandı."
WooCommerce Kenar Çubuğu Yönetimi
WooCommerce sitelerinde kenar çubuğu yönetimi biraz daha karmaşıktır çünkü standart sidebar’ların yanında WooCommerce’e özgü sidebar’lar da bulunur. Bunları listelemek için:
# WooCommerce sidebar'larını görmek için tüm sidebar'ları listele
wp sidebar list --fields=id,name,status
# Tipik WooCommerce sidebar ID'leri şunlardır:
# woocommerce_sidebar - Mağaza kenar çubuğu
# woocommerce_pagetemplates_sidebar - Sayfa şablonu kenar çubuğu
Bir WooCommerce sitesi için kapsamlı kenar çubuğu kurulumu örneği:
#!/bin/bash
# WooCommerce sidebar tam kurulum betiği
WP_PATH="/var/www/woocommerce-site"
SHOP_SIDEBAR="woocommerce_sidebar"
echo "WooCommerce sidebar kurulumu başlıyor..."
# Önce mevcut widget'ları temizle
echo "Mevcut widget'lar temizleniyor..."
EXISTING=$(wp --path="$WP_PATH" widget list "$SHOP_SIDEBAR" --field=id 2>/dev/null)
if [ -n "$EXISTING" ]; then
echo "$EXISTING" | xargs wp --path="$WP_PATH" widget delete
fi
# Yeni widget'ları ekle
echo "Arama widget'ı ekleniyor..."
wp --path="$WP_PATH" widget add search "$SHOP_SIDEBAR" 1
--title="Ürün Ara"
echo "Kategori widget'ı ekleniyor..."
wp --path="$WP_PATH" widget add wc_product_categories "$SHOP_SIDEBAR" 2
--title="Ürün Kategorileri"
--count=0
--hierarchical=1
--show_children_only=0
echo "Fiyat filtresi ekleniyor..."
wp --path="$WP_PATH" widget add woocommerce_price_filter "$SHOP_SIDEBAR" 3
--title="Fiyata Göre Filtrele"
echo "Son ürünler widget'ı ekleniyor..."
wp --path="$WP_PATH" widget add woocommerce_recently_viewed "$SHOP_SIDEBAR" 4
--title="Son İncelediklerim"
echo "Kurulum tamamlandı!"
# Sonucu doğrula
echo "Mevcut widget yapısı:"
wp --path="$WP_PATH" widget list "$SHOP_SIDEBAR" --fields=id,name,position
Tema Değişikliği Sırasında Widget’ları Koruma
Tema değişikliği WordPress’in en kritik anlarından biridir. Widget’lar inactive sidebar’a taşınır ve kaybolabilir. Bunu önlemek için tema değişikliği öncesi ve sonrası için bir strateji geliştirmeniz gerekir:
#!/bin/bash
# Tema değişikliği öncesi widget yedekleme
WP_PATH="/var/www/musteri-site"
BACKUP_DIR="/tmp/widget-backup-$(date +%Y%m%d%H%M%S)"
mkdir -p "$BACKUP_DIR"
echo "Widget yedekleme başlıyor: $BACKUP_DIR"
# Tüm aktif sidebar'ları ve widget'larını yedekle
SIDEBARS=$(wp --path="$WP_PATH" sidebar list --field=id --status=active)
for SIDEBAR in $SIDEBARS; do
echo "Yedekleniyor: $SIDEBAR"
wp --path="$WP_PATH" widget list "$SIDEBAR"
--format=json > "$BACKUP_DIR/${SIDEBAR}.json"
# İnsan okunabilir format için de kaydet
wp --path="$WP_PATH" widget list "$SIDEBAR"
--fields=id,name,position,options
--format=table > "$BACKUP_DIR/${SIDEBAR}_readable.txt"
done
# WordPress seçeneklerini de yedekle (widget verileri burada saklanır)
wp --path="$WP_PATH" option get widget_search --format=json > "$BACKUP_DIR/option_widget_search.json"
wp --path="$WP_PATH" option get widget_categories --format=json > "$BACKUP_DIR/option_widget_categories.json"
wp --path="$WP_PATH" option get sidebars_widgets --format=json > "$BACKUP_DIR/sidebars_widgets.json"
echo "Yedekleme tamamlandı: $BACKUP_DIR"
ls -la "$BACKUP_DIR"
sidebars_widgets seçeneği özellikle önemlidir çünkü hangi widget’ın hangi kenar çubuğunda olduğunu WordPress burada saklar.
Sorun Giderme: Inactive Widget’lar
Tema değişikliğinden sonra widget’larınız “wp_inactive_widgets” adlı özel bir alana taşınır. Bunları geri almak için:
# Inactive widget'ları listele
wp widget list wp_inactive_widgets --fields=id,name
# Bir inactive widget'ı aktif sidebar'a taşı
wp widget move 12 --sidebar-id=sidebar-1 --position=1
# Tüm inactive widget'ları görüntüle ve karar ver
wp sidebar list --fields=id,name,status,widgets
Eğer bir widget inactive listede gözükmüyorsa ama aslında kaybolmuş bir widget’ı arıyorsanız, veritabanında arama yapabilirsiniz:
# Widget seçeneklerini veritabanından sorgula
wp option list --search="widget_*" --format=table
# Belirli bir widget türünün ayarlarına bak
wp option get widget_text --format=json
Gelişmiş Kullanım: WP-CLI ile Programatik Sidebar Kaydı
Normalde kenar çubuklarını functions.php veya bir eklenti aracılığıyla kaydedersiniz. Ancak mevcut kurulumda hangi kenar çubuklarının kayıtlı olduğunu ve bunların ayarlarını kontrol etmek için WP CLI’yi kullanabilirsiniz:
# PHP kodu çalıştırarak tüm kayıtlı sidebar'ları detaylı göster
wp eval 'global $wp_registered_sidebars; foreach($wp_registered_sidebars as $id => $sidebar) { echo $id . " => " . $sidebar["name"] . "n"; }'
# Bir sidebar'ın tam konfigürasyonunu gör
wp eval 'global $wp_registered_sidebars; print_r($wp_registered_sidebars["sidebar-1"]);'
Bu komutlar özellikle özel geliştirilen temalarda kenar çubuğu yapısını anlamak için çok işe yarar.
Cron ile Otomatik Widget Rotasyonu
Bazı senaryolarda widget’ları belirli zamanlarda değiştirmek isteyebilirsiniz. Örneğin kampanya dönemlerinde farklı widget göstermek:
#!/bin/bash
# /usr/local/bin/wp-widget-rotate.sh
# Crontab: 0 9 * * 1 /usr/local/bin/wp-widget-rotate.sh
WP_PATH="/var/www/eticaret-site"
SIDEBAR="sidebar-1"
BUGUN=$(date +%u) # 1=Pazartesi, 7=Pazar
# Hafta içi widget yapısı
if [ "$BUGUN" -le 5 ]; then
# Hafta içi: Standart widget'lar
wp --path="$WP_PATH" widget reset "$SIDEBAR"
wp --path="$WP_PATH" widget add search "$SIDEBAR" 1 --title="Arama"
wp --path="$WP_PATH" widget add categories "$SIDEBAR" 2 --title="Kategoriler"
else
# Hafta sonu: Kampanya widget'ı öne çıkar
wp --path="$WP_PATH" widget reset "$SIDEBAR"
wp --path="$WP_PATH" widget add custom_html "$SIDEBAR" 1
--title="Hafta Sonu Kampanyası"
--content="<a href='/kampanya'><img src='/wp-content/uploads/kampanya.jpg' /></a>"
wp --path="$WP_PATH" widget add search "$SIDEBAR" 2 --title="Arama"
fi
Bu betiği crontab’a ekleyerek otomatik widget rotasyonu sağlayabilirsiniz.
Sık Yapılan Hatalar ve Çözümleri
Hata 1: Widget eklenemedi, bilinmeyen sidebar
Bu genellikle tema aktif değilken veya yanlış sidebar ID kullanıldığında olur:
# Önce mevcut aktif sidebar'ları doğrula
wp sidebar list --status=active --field=id
# Temanın doğru yüklendiğinden emin ol
wp theme status
Hata 2: Widget seçenekleri doğru kaydedilmiyor
Karmaşık widget seçeneklerini JSON formatında geçebilirsiniz:
# Metin widget'ı için gelişmiş seçenekler
wp widget add text sidebar-1 1
--title="Hakkımızda"
--text="<p>Şirketimiz hakkında kısa bilgi.</p>"
--filter=1
Hata 3: Permission denied
# Web sunucusu kullanıcısı olarak çalıştır
sudo -u www-data wp --path=/var/www/site sidebar list
# Veya root olarak çalışıyorsanız
wp --path=/var/www/site sidebar list --allow-root
Sonuç
wp sidebar komutu ve beraberindeki wp widget komut seti, WordPress kenar çubuğu yönetimini admin panelinin kısıtlamalarından kurtararak gerçek bir sistem yöneticisi deneyimi sunar. Özellikle şu senaryolarda büyük fark yaratır:
- Çok sayıda siteyi aynı anda yönetmek
- Tema değişikliği öncesinde widget yapısını belgelemek ve korumak
- Periyodik widget güncellemelerini otomatize etmek
- WooCommerce mağaza kenar çubuklarını standart bir yapıya oturtmak
- Sorun giderme sırasında widget durumunu hızlıca sorgulamak
WP CLI’nin gerçek gücü tek komutlarda değil, bu komutları birleştiren betiklerde yatıyor. Bash betikleri, cron jobları ve WP CLI komutlarını bir araya getirdiğinizde WordPress yönetimi bambaşka bir boyut kazanıyor. Admin paneline defalarca giriş yapmak yerine birkaç satır betikle aynı işi saniyeler içinde halledebilirsiniz.
Eğer henüz WP CLI’yi aktif olarak kullanmıyorsanız, kenar çubuğu yönetiminden başlamak iyi bir giriş noktası. Kavramlar basit, sonuçlar hemen görünür ve öğrendikleriniz WordPress yönetiminin diğer alanlarına da kolayca transfer oluyor.
