WP CLI ile WordPress Kenar Çubuğu Widget Yönetimi

WordPress sitenizin kenar çubuğunu elle tıklayarak düzenlemek, özellikle birden fazla siteniz varsa veya rutin bakım yapıyorsanız ciddi zaman kaybına yol açar. WP-CLI’nin wp widget komutu, bu süreci tamamen terminal üzerinden yönetmenizi sağlar. Hadi bu komutu her açıdan inceleyelim.

WP Widget Komutuna Genel Bakış

WP-CLI’de wp widget alt komutu, WordPress’in widget sistemini komut satırından tam anlamıyla kontrol etmenize olanak tanır. Widget ekleyebilir, kaldırabilir, taşıyabilir, listeleyebilir ve mevcut tüm sidebar’ları görebilirsiniz. Bu özellik özellikle şu senaryolarda hayat kurtarır:

  • Çok sayıda WordPress sitesini yöneten ajanslar
  • Staging’den production’a geçişlerde widget yapılandırmasını aktarmak isteyenler
  • Otomatik deployment pipeline’larında widget kurulumu yapanlar
  • Toplu site güncellemeleri sırasında standart widget setini uygulayanlar

Temel komut yapısı şu şekildedir:

wp widget <komut> [seçenekler]

Alt komutlar genel olarak şunlardır:

  • add: Bir sidebar’a yeni widget ekler
  • list: Mevcut widget’ları listeler
  • move: Widget’ı başka bir konuma veya sidebar’a taşır
  • deactivate: Widget’ı devre dışı bırakır ama siler
  • delete: Widget’ı tamamen kaldırır
  • reset: Bir sidebar’ı sıfırlar
  • update: Widget ayarlarını günceller

Mevcut Sidebar’ları Keşfetmek

Bir şey yapmadan önce hangi sidebar’ların mevcut olduğunu bilmeniz gerekir. Temanızın functions.php dosyasında kayıtlı tüm sidebar’ları görmek için:

wp sidebar list

Bu komut çıktısında sidebar ID’lerini, isimlerini ve kaç tane aktif widget barındırdıklarını göreceksiniz. Örnek bir çıktı şöyle görünebilir:

+-----------------+------------------------------+--------+
| id              | name                         | count  |
+-----------------+------------------------------+--------+
| sidebar-1       | Blog Kenar Çubuğu            | 3      |
| footer-1        | Alt Bilgi 1. Kolon           | 2      |
| footer-2        | Alt Bilgi 2. Kolon           | 1      |
| wp_inactive_widgets | Etkin Olmayan Widget'lar | 5      |
+-----------------+------------------------------+--------+

Bu ID’leri not alın çünkü bundan sonraki tüm komutlarda kullanacaksınız. sidebar-1, footer-1 gibi değerler tema geliştiricisinin belirlediği isimlerdir ve temadan temaya farklılık gösterir.

Widget Listeleme

Belirli bir sidebar’daki widget’ları görmek için:

wp widget list sidebar-1

Daha detaylı bilgi almak isterseniz, özellikle widget ayarlarını da görmek için JSON formatını kullanabilirsiniz:

wp widget list sidebar-1 --format=json

Tüm sidebar’lardaki tüm widget’ları tek seferde görmek için ise şunu kullanabilirsiniz:

wp widget list --all

Bu komut size her widget’ın ID’sini, adını, sidebar’ını, pozisyonunu ve ayarlarını özetler. Özellikle bir sitede hangi widget’ların nerede olduğunu hızlıca anlamak istediğinizde çok kullanışlıdır.

Widget Ekleme

Şimdi asıl işe gelelim. wp widget add komutuyla bir sidebar’a widget ekleyebilirsiniz. Temel sözdizimi şu şekildedir:

wp widget add <widget-adı> <sidebar-id> <pozisyon> [--<alan>=<değer>]

Basit bir metin widget’ı ekleyelim:

wp widget add text sidebar-1 1 --title="Hakkımızda" --text="Bu blog sistem yöneticileri için yazılmıştır." --filter=true

Burada 1 widget’ın sidebar’daki sıra numarasını belirtir. Eğer zaten 3 widget varsa ve yeni widget’ı en alta eklemek istiyorsanız 4 yazabilirsiniz ya da mevcut bir pozisyona yazarsanız diğerleri kayar.

Bir arama widget’ı eklemek son derece kolaydır:

wp widget add search sidebar-1 1 --title="Site İçi Arama"

Son yazılar widget’ı eklemek için:

wp widget add recent-posts sidebar-1 2 --title="Son Yazılar" --number=5 --show_date=1

Son yorumlar widget’ı da benzer şekilde çalışır:

wp widget add recent-comments sidebar-1 3 --title="Son Yorumlar" --number=5

Gerçek Dünya Senaryosu: Yeni Site Kurulumunu Otomatikleştirme

Diyelim ki bir ajans olarak her ay 10-15 yeni WordPress sitesi kuruyorsunuz. Her sitenin footer ve sidebar’ında standart bir widget seti olması gerekiyor. Bunu manuel yapmak yerine bir shell script hazırlayabilirsiniz:

#!/bin/bash
# setup-widgets.sh - Standart widget kurulumu

SITE_PATH="/var/www/html/yenisite"

# Önce mevcut widget'ları temizleyelim
wp --path=$SITE_PATH widget reset sidebar-1
wp --path=$SITE_PATH widget reset footer-1
wp --path=$SITE_PATH widget reset footer-2

# Blog sidebar kurulumu
wp --path=$SITE_PATH widget add search sidebar-1 1 
    --title="Ara"

wp --path=$SITE_PATH widget add recent-posts sidebar-1 2 
    --title="Son Yazılar" 
    --number=5 
    --show_date=1

wp --path=$SITE_PATH widget add categories sidebar-1 3 
    --title="Kategoriler" 
    --count=1 
    --dropdown=0

wp --path=$SITE_PATH widget add tag_cloud sidebar-1 4 
    --title="Etiketler" 
    --taxonomy="post_tag"

# Footer birinci kolon
wp --path=$SITE_PATH widget add text footer-1 1 
    --title="Şirket Hakkında" 
    --text="Şirket açıklaması buraya gelecek." 
    --filter=true

# Footer ikinci kolon
wp --path=$SITE_PATH widget add recent-posts footer-2 1 
    --title="Son İçerikler" 
    --number=3

echo "Widget kurulumu tamamlandı!"

Bu script ile yeni bir sitede widget yapılandırması saniyeler içinde tamamlanır. chmod +x setup-widgets.sh ile çalıştırılabilir hale getirip kullanabilirsiniz.

Widget Güncelleme

Mevcut bir widget’ın ayarlarını değiştirmek için önce widget ID’sini öğrenmeniz gerekir:

wp widget list sidebar-1 --format=table

Çıktıdan widget ID’sini aldıktan sonra (örneğin text-3) güncelleme yapabilirsiniz:

wp widget update text-3 --title="Güncel Başlık" --text="Yeni içerik buraya."

Burada dikkat edilmesi gereken nokta, her widget türünün farklı parametreleri vardır. text widget’ı için --title ve --text kullanırken, recent-posts için --number ve --show_date kullanırsınız. Widget’ın desteklediği parametreleri öğrenmek için önce --format=json ile mevcut ayarlarını görüntüleyebilirsiniz.

Widget Taşıma

Bir widget’ı aynı sidebar içinde başka bir pozisyona ya da tamamen farklı bir sidebar’a taşımak için move komutunu kullanabilirsiniz:

# Aynı sidebar içinde pozisyon değiştirme
wp widget move text-3 --position=1

# Farklı bir sidebar'a taşıma
wp widget move text-3 --sidebar-id=footer-1

# Hem sidebar hem pozisyon değiştirme
wp widget move text-3 --sidebar-id=footer-2 --position=2

Bu komut özellikle site yeniden yapılandırmalarında işe yarar. Bir temadan diğerine geçiş yaparken widget’larınız genellikle “Etkin Olmayan Widget’lar” alanına düşer. Bu widget’ları yeni temanın sidebar’larına taşımak için şunları yapabilirsiniz:

# Önce etkin olmayan widget'ları listele
wp widget list wp_inactive_widgets

# Sonra istediğinizi aktif sidebar'a taşıyın
wp widget move text-5 --sidebar-id=sidebar-1 --position=1

Widget Devre Dışı Bırakma ve Silme

deactivate komutu widget’ı siler ama yapılandırmasını korur, wp_inactive_widgets alanına taşır. delete ise widget’ı tamamen kaldırır.

# Widget'ı devre dışı bırak (ayarlar korunur)
wp widget deactivate text-3

# Widget'ı tamamen sil
wp widget delete text-3

# Bir sidebar'daki tüm widget'ları devre dışı bırak
wp widget deactivate $(wp widget list sidebar-1 --format=ids)

Gerçek Dünya Senaryosu: Sidebar Yedekleme ve Geri Yükleme

Büyük bir güncelleme yapmadan önce mevcut widget yapılandırmasını yedeklemek isteyebilirsiniz. WP-CLI bunu doğrudan desteklemese de widget verilerini options üzerinden yedekleyebilirsiniz çünkü widget verileri WordPress options tablosunda saklanır:

#!/bin/bash
# widget-backup.sh

SITE_PATH="/var/www/html/sitem"
BACKUP_DIR="/home/sysadmin/widget-backups"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Widget seçeneklerini yedekle
wp --path=$SITE_PATH option get widget_text --format=json > 
    "$BACKUP_DIR/widget_text_$DATE.json"

wp --path=$SITE_PATH option get widget_recent-posts --format=json > 
    "$BACKUP_DIR/widget_recent_posts_$DATE.json"

wp --path=$SITE_PATH option get widget_search --format=json > 
    "$BACKUP_DIR/widget_search_$DATE.json"

wp --path=$SITE_PATH option get sidebars_widgets --format=json > 
    "$BACKUP_DIR/sidebars_widgets_$DATE.json"

echo "Widget yedeklemesi tamamlandı: $BACKUP_DIR"
echo "Oluşturulan dosyalar:"
ls -la $BACKUP_DIR/*$DATE*

Geri yükleme için ise:

#!/bin/bash
# widget-restore.sh

SITE_PATH="/var/www/html/sitem"
BACKUP_DATE="20241115_143022"
BACKUP_DIR="/home/sysadmin/widget-backups"

# Sidebar yapısını geri yükle
SIDEBARS=$(cat "$BACKUP_DIR/sidebars_widgets_$BACKUP_DATE.json")
wp --path=$SITE_PATH option update sidebars_widgets "$SIDEBARS" --format=json

echo "Widget yapılandırması geri yüklendi!"

Çoklu Site Yönetimi

WordPress Multisite kurulumunda veya birden fazla bağımsız siteyi yönetirken widget yönetimini toplu olarak yapmak için şu yaklaşımı kullanabilirsiniz:

#!/bin/bash
# multisite-widget-update.sh

SITES=(
    "/var/www/html/site1"
    "/var/www/html/site2"
    "/var/www/html/site3"
    "/var/www/html/site4"
)

for SITE in "${SITES[@]}"; do
    echo "İşleniyor: $SITE"
    
    # Mevcut arama widget'larını güncelle
    SEARCH_WIDGETS=$(wp --path=$SITE widget list --all 
        --format=csv | grep "^search" | cut -d',' -f1)
    
    for WIDGET_ID in $SEARCH_WIDGETS; do
        wp --path=$SITE widget update $WIDGET_ID 
            --title="Sitede Ara"
        echo "  Güncellendi: $WIDGET_ID"
    done
    
    echo "  Tamamlandı: $SITE"
done

echo "Tüm siteler güncellendi!"

WooCommerce Widget’ları

WooCommerce de kendi widget’larını ekler ve bunları WP-CLI ile yönetebilirsiniz. Özellikle woocommerce-product-search, woocommerce_price_filter ve woocommerce_layered_nav gibi widget’lar e-ticaret sitelerinde sıkça kullanılır.

# WooCommerce sidebar'larını listele
wp widget list shop-sidebar --allow-root

# Ürün arama widget'ı ekle
wp widget add woocommerce_product_search shop-sidebar 1 
    --title="Ürün Ara"

# Fiyat filtresi ekle
wp widget add woocommerce_price_filter shop-sidebar 2 
    --title="Fiyat Aralığı"

# Kategori filtresi ekle  
wp widget add woocommerce_product_categories shop-sidebar 3 
    --title="Kategoriler" 
    --count=1 
    --hierarchical=1

WooCommerce widget kurulumunu otomatikleştirmek, özellikle ürün kataloğu sayfalarındaki filtreleme araçlarını standart tutmak için son derece değerlidir.

Widget Sorunlarını Giderme

Bazen widget’lar beklendiği gibi davranmaz. WP-CLI bu durumda da yardımcıdır:

# Widget verilerini ham haliyle kontrol et
wp option get sidebars_widgets --format=json | python3 -m json.tool

# Belirli bir widget'ın tüm ayarlarını gör
wp widget list sidebar-1 --format=json | python3 -m json.tool

# Widget varlığını doğrula
wp widget list sidebar-1 --format=ids

Eğer bir widget kaybolmuş gibi görünüyorsa çoğu zaman wp_inactive_widgets alanındadır:

wp widget list wp_inactive_widgets --format=table

Bazen widget verilerinin bozulduğunu görebilirsiniz. Bu durumda options tablosunu doğrudan temizleyip yeniden kurmak çözüm olabilir:

# Dikkatli kullanın! Bu komutu geri almanın yolu yoktur
wp option delete widget_text
wp option delete sidebars_widgets

# Sonra wp widget add komutlarıyla yeniden kurun

Debug Modunda Çalışmak

Widget komutlarını çalıştırırken hata ayıklamak için --debug bayrağını kullanabilirsiniz:

wp widget add text sidebar-1 1 --title="Test" --debug

Bu, arka planda neler olduğunu görmenizi sağlar. Özellikle bir widget eklenmiyor ya da ayarlar kaydedilmiyorsa debug modu gerçekten nerede sorun olduğunu ortaya çıkarır.

İpuçları ve Dikkat Edilmesi Gereken Noktalar

Production ortamında widget değişikliği yapmadan önce her zaman yedek alın. Widget verileri sidebars_widgets ve widget_ option anahtarlarında tutulduğu için wp option get sidebars_widgets ile hızlı bir anlık görüntü alabilirsiniz.

Widget adları konusunda dikkatli olun. WP-CLI’de kullandığınız widget adı, WordPress’in dahili widget ID’si ile aynı olmalıdır. search yerine wp-search yazarsanız hata alırsınız. Mevcut kayıtlı widget’ları şu komutla görebilirsiniz:

wp eval 'global $wp_widget_factory; print_r(array_keys($wp_widget_factory->widgets));'

Bu komut size tüm kayıtlı widget sınıflarını listeler. WP-CLI komutunda kullanmanız gereken isimler bu listeden türetilir; genellikle küçük harf ve tire kullanımıyla yazılır.

Pozisyon numaralarına dikkat edin. Eğer sidebar’da 3 widget varsa ve 5. pozisyona yeni bir widget eklerseniz, widget 4. sıraya yerleştirilir. Boşluk bırakmaz.

Sonuç

wp widget komutları, WordPress kenar çubuğu yönetimini elle yapmaktan çıkarıp otomatikleştirilebilir, scriptlenebilir ve tekrarlanabilir bir sürece dönüştürür. Ajanslar için standart kurulum scriptleri, DevOps süreçlerinde deployment otomasyonu ve çok sayıda site yönetiminde toplu değişiklikler için bu araç gerçekten vazgeçilmez bir konuma gelir.

En pratik kullanım senaryolarına bakacak olursak: yeni site kurulumunu standartlaştırmak, tema değişikliği öncesinde widget yapılandırmasını yedeklemek ve çoklu sitelerde tutarlı bir widget deneyimi sunmak bunların başında gelir. Bunların yanında WooCommerce mağazalarında ürün filtrelerini otomatik olarak kurmak da ciddi zaman kazandırır.

Terminal üzerinden çalışmayı sevenler için bu komutlar bir kez öğrenildikten sonra WordPress admin paneline girme ihtiyacını önemli ölçüde azaltır. Geri kalan tek iş scriptlerinizi düzenli test etmek ve farklı temalardaki sidebar ID’lerini doğru yazmak.

Bir yanıt yazın

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