WP CLI ile WordPress Network Yönetimi
Eğer birden fazla WordPress sitesini tek bir kurulumdan yönetmek istiyorsanız, WordPress Multisite (Network) tam size göre. Ama asıl güç, bu yapıyı WP CLI ile yönetmeye başladığınızda ortaya çıkıyor. Tek tek admin paneline girip işlem yapmak yerine, terminal üzerinden tüm ağı kontrol edebiliyorsunuz. Bu yazıda wp network ve ilgili multisite komutlarını gerçek dünya senaryolarıyla ele alacağız.
WordPress Network Nedir, Ne Zaman Kullanılır?
WordPress Multisite, tek bir WordPress kurulumu üzerinden birden fazla site yönetmenizi sağlar. Bir ajans düşünün: 50 müşterinin sitesini ayrı ayrı güncellemek yerine, tek bir network üzerinden yönetebilirsiniz. Ya da bir üniversite: her fakülte için ayrı bir alt site, merkezi bir yönetim paneli.
Multisite kurulumunda iki tür yapı var:
- Subdomain tabanlı: site1.domain.com, site2.domain.com
- Subdirectory tabanlı: domain.com/site1, domain.com/site2
WP CLI’ın wp network ve ilgili komut grupları bu yapıyı terminal üzerinden tamamen yönetmenizi sağlıyor. Şimdi işin pratiğine geçelim.
WP CLI ile Network Kurulumu
Eğer henüz bir multisite kurulumunuz yoksa, WP CLI ile bunu birkaç adımda halledebilirsiniz.
# Önce standart WordPress kurulumu yapın
wp core download --locale=tr_TR
# wp-config.php oluşturun
wp config create --dbname=wpnetwork --dbuser=root --dbpass=sifre123 --dbhost=localhost
# Veritabanını oluşturun
wp db create
# WordPress kurulumu
wp core install --url=anasite.com --title="Ana Site" --admin_user=admin --admin_password=guvenli_sifre [email protected]
# Multisite'ı etkinleştirin (subdomain için)
wp core multisite-convert --subdomains
# Subdirectory için
wp core multisite-convert
Bu komutların ardından WP CLI size wp-config.php ve .htaccess dosyalarına eklemeniz gereken kodları gösterecek. O değişiklikleri yaptıktan sonra network hazır.
wp site Komutu ile Site Yönetimi
Network’teki siteleri yönetmenin ana komutu wp site. Bu komut altında site oluşturma, listeleme, silme ve çok daha fazlası var.
Yeni Site Oluşturma
# Temel site oluşturma
wp site create --slug=magazin --title="Haber Magazin" [email protected]
# Belirli bir kullanıcıya atayarak oluşturma
wp site create --slug=teknoloji --title="Teknoloji Blogu" [email protected] --user=teknoloji_editoru
# Subdomain tabanlı network için
wp site create --slug=teknoloji --title="Teknoloji" [email protected]
# Bu durumda teknoloji.anasite.com olarak erişilir
Mevcut Siteleri Listeleme
# Tüm siteleri listele
wp site list
# Sadece aktif siteleri göster
wp site list --field=url
# Belirli alanları göster
wp site list --fields=blog_id,url,last_updated
# Archived siteleri filtrele
wp site list --archived=1
Gerçek bir senaryoda bu çıktıyı bir script içinde kullanabilirsiniz. Mesela her sitede bir eklentiyi güncellemek istiyorsanız:
# Tüm site ID'lerini alıp döngüde işlem yap
for site_url in $(wp site list --field=url --format=csv); do
echo "Güncelleniyor: $site_url"
wp plugin update --all --url=$site_url
done
Bu tek satır (aslında birkaç satır) ile tüm network’teki sitelerin eklentilerini güncelliyorsunuz. Tek tek admin paneline girip “Güncelle” butonuna basmak yerine.
Site Silme ve Arşivleme
Bir site kapandığında onu silmek yerine arşivlemek genellikle daha güvenli bir yaklaşım.
# Siteyi arşivle (erişilemez yapar ama veri kalır)
wp site archive 5
# Siteyi aktifleştir
wp site unarchive 5
# Siteyi tamamen sil (geri dönüşü yok!)
wp site delete 5
# Onay sormadan sil
wp site delete 5 --yes
# Birden fazla siteyi sil
wp site delete 5 6 7 --yes
Önemli: wp site delete komutu veritabanından ilgili tabloları da siler. Üretim ortamında kullanmadan önce mutlaka yedek alın.
wp network Meta Yönetimi
Network seviyesindeki ayarları wp network meta ile yönetebilirsiniz.
# Network meta değerini oku
wp network meta get 1 site_name
# Network meta değeri ekle veya güncelle
wp network meta update 1 site_name "Yeni Network Adı"
# Tüm network meta değerlerini listele
wp network meta list 1
# Belirli bir meta değerini sil
wp network meta delete 1 eski_ayar
wp site meta ile Site Bazlı Ayarlar
Her sitenin kendi meta değerlerini de yönetebilirsiniz.
# Site 3 için özel meta değeri ekle
wp site meta add 3 ozel_tema_ayari "dark_mode"
# Değeri güncelle
wp site meta update 3 ozel_tema_ayari "light_mode"
# Değeri oku
wp site meta get 3 ozel_tema_ayari
# Sil
wp site meta delete 3 ozel_tema_ayari
Network Genelinde Eklenti Yönetimi
Multisite’ın en güçlü özelliklerinden biri eklentileri network genelinde etkinleştirme. WP CLI ile bu çok kolay.
# Eklentiyi network genelinde etkinleştir
wp plugin activate woocommerce --network
# Network genelinde devre dışı bırak
wp plugin deactivate woocommerce --network
# Belirli bir sitede etkinleştir
wp plugin activate contact-form-7 --url=teknoloji.anasite.com
# Tüm sitelerde tek tek etkinleştir
wp site list --field=url | xargs -I % wp plugin activate seo-plugin --url=%
Eklenti Durumunu Kontrol Etme
# Network genelinde yüklü eklentileri listele
wp plugin list --network
# Sadece network-aktif eklentileri göster
wp plugin list --status=active-network
# Belirli bir sitedeki eklenti durumunu kontrol et
wp plugin list --url=magazin.anasite.com --status=active
Network Genelinde Tema Yönetimi
Temalar da eklentiler gibi network seviyesinde yönetilebilir.
# Temayı network için etkinleştir (tüm sitelerin kullanabilmesi için)
wp theme enable astra --network
# Belirli bir temayı devre dışı bırak
wp theme disable twentytwentythree --network
# Belirli sitede tema değiştir
wp theme activate astra --url=magazin.anasite.com
# Tüm sitelerde aynı temayı etkinleştir
for site_url in $(wp site list --field=url); do
wp theme activate astra --url=$site_url
done
Gerçek Dünya Senaryosu: Toplu Kullanıcı Yönetimi
Diyelim ki bir eğitim platformu işletiyorsunuz. Yeni dönem başladı ve 200 öğrenciyi belirli sitelere eklemeniz gerekiyor. Bunu manuel yapmak saatler alır.
#!/bin/bash
# toplu_kullanici_ekle.sh
NETWORK_URL="anasite.com"
CSV_DOSYA="ogrenciler.csv"
while IFS=, read -r email isim soyisim site_slug; do
# Kullanıcı oluştur
wp user create "${isim}.${soyisim}" "$email"
--role=subscriber
--first_name="$isim"
--last_name="$soyisim"
--url=$NETWORK_URL
# Kullanıcıyı ilgili siteye ekle
wp user set-role "${isim}.${soyisim}" subscriber
--url="${site_slug}.${NETWORK_URL}"
echo "$isim $soyisim -> ${site_slug}.${NETWORK_URL} sitesine eklendi"
done < "$CSV_DOSYA"
Bu script ile CSV dosyasındaki tüm öğrencileri otomatik olarak oluşturup ilgili sitelere ekleyebilirsiniz.
Gerçek Dünya Senaryosu: Network Genelinde Seçenek Güncelleme
Tüm sitelerin zaman dilimini değiştirmeniz gerekiyor. 30 site varsa 30 kez admin paneline girmek yerine:
#!/bin/bash
# tum_sitelerde_ayar_guncelle.sh
echo "Network'teki tüm sitelerin zaman dilimi güncelleniyor..."
wp site list --field=url --format=csv | while read site_url; do
wp option update timezone_string "Europe/Istanbul" --url=$site_url
wp option update gmt_offset "3" --url=$site_url
echo "$site_url -> Güncellendi"
done
echo "Tamamlandı!"
Ya da belki SMTP ayarlarını güncellemek istiyorsunuz:
# Tüm sitelerde mail gönderici adresini güncelle
for site in $(wp site list --field=url); do
wp option update admin_email "[email protected]" --url=$site
echo "$site güncellendi"
done
Gerçek Dünya Senaryosu: Yedekleme Script’i
Network’teki her siteyi ayrı ayrı yedekleyen bir script:
#!/bin/bash
# network_yedek.sh
YEDEK_DIZIN="/var/backups/wordpress-network"
TARIH=$(date +%Y%m%d_%H%M%S)
mkdir -p $YEDEK_DIZIN
echo "=== WordPress Network Yedekleme Başladı ==="
echo "Tarih: $TARIH"
# Veritabanını yedekle
wp db export "$YEDEK_DIZIN/tam_veritabani_$TARIH.sql"
echo "Veritabanı yedeklendi."
# Her site için ayrı içerik yedeklemesi
wp site list --fields=blog_id,url --format=csv | tail -n +1 | while IFS=, read blog_id site_url; do
echo "Site yedekleniyor: $site_url (ID: $blog_id)"
# Site medya dosyalarını yedekle
SITE_DIZIN="$YEDEK_DIZIN/site_${blog_id}_$TARIH"
mkdir -p $SITE_DIZIN
# Site seçeneklerini dışa aktar
wp option export --url=$site_url > "$SITE_DIZIN/options.json" 2>/dev/null || true
echo " -> Tamamlandı"
done
# Eski yedekleri temizle (30 günden eski)
find $YEDEK_DIZIN -name "*.sql" -mtime +30 -delete
echo "Eski yedekler temizlendi."
echo "=== Yedekleme Tamamlandı ==="
wp super-admin Komutu
Network’te süper admin yönetimi için özel bir komut var.
# Kullanıcıya süper admin yetkisi ver
wp super-admin add kullanici_adi
# Birden fazla kullanıcıya aynı anda ver
wp super-admin add kullanici1 kullanici2 kullanici3
# Süper admin yetkisini kaldır
wp super-admin remove kullanici_adi
# Tüm süper adminleri listele
wp super-admin list
# Liste formatını değiştir
wp super-admin list --format=json
Güvenlik açısından önemli bir not: Süper admin listesini düzenli olarak gözden geçirin. Eski çalışanların ya da eski müşterilerin hâlâ süper admin yetkisi olup olmadığını kontrol etmek için:
# Süper adminleri JSON formatında al ve incele
wp super-admin list --format=json | python3 -m json.tool
wp signups ile Kayıt Yönetimi
Eğer network’te yeni üye kayıtlarına izin veriyorsanız, bekleyen kayıtları WP CLI ile yönetebilirsiniz.
# Bekleyen kayıtları listele
wp signups list
# Belirli bir kaydı onayla
wp signups activate ACTIVATION_KEY
# Bekleyen kayıt sayısını göster
wp signups count
Network Sağlık Kontrolü
Tüm network’ün durumunu hızlıca kontrol etmek için bir script yazalım:
#!/bin/bash
# network_saglik_kontrol.sh
echo "=============================="
echo "WordPress Network Sağlık Raporu"
echo "Tarih: $(date)"
echo "=============================="
# Toplam site sayısı
SITE_SAYISI=$(wp site list --count 2>/dev/null || wp site list --format=count)
echo "Toplam site sayısı: $SITE_SAYISI"
# Arşivlenmiş siteler
ARSIVLENEN=$(wp site list --archived=1 --format=count 2>/dev/null || echo "0")
echo "Arşivlenmiş siteler: $ARSIVLENEN"
# Süper admin sayısı
echo "Süper admin sayısı: $(wp super-admin list | wc -l)"
# Her sitede WordPress çekirdeği sürümü
echo ""
echo "--- Site Durumları ---"
for site_url in $(wp site list --field=url); do
echo -n "$site_url -> "
WP_VER=$(wp core version --url=$site_url 2>/dev/null)
PLUGIN_SAYI=$(wp plugin list --url=$site_url --format=count 2>/dev/null)
echo "WP $WP_VER | $PLUGIN_SAYI eklenti"
done
echo ""
echo "--- Güncelleme Gerektiren Eklentiler ---"
for site_url in $(wp site list --field=url); do
GUNCELLEME=$(wp plugin list --url=$site_url --update=available --format=count 2>/dev/null || echo "0")
if [ "$GUNCELLEME" -gt "0" ]; then
echo "$site_url: $GUNCELLEME eklenti güncellemesi bekliyor"
fi
done
echo ""
echo "Rapor tamamlandı."
Performans İpuçları
WP CLI komutlarını network üzerinde çalıştırırken birkaç önemli nokta var.
–url parametresi: Multisite’da her zaman hangi site üzerinde işlem yaptığınızı belirtmeniz gerekiyor. Belirtmezseniz WP CLI ana siteyi kullanır.
# Ana siteye bağlı işlem
wp option get siteurl
# Alt siteye bağlı işlem
wp option get siteurl --url=magazin.anasite.com
–quiet parametresi: Script içinde gereksiz çıktıları bastırmak için kullanın.
wp plugin activate woocommerce --url=magazin.anasite.com --quiet
–allow-root: Docker container veya root kullanıcısıyla çalışıyorsanız gerekebilir.
wp site list --allow-root
Paralel işlem: Çok sayıda sitede işlem yapıyorsanız xargs ile paralel çalıştırabilirsiniz.
# 4 paralel işlemle tüm sitelerde eklenti güncelle
wp site list --field=url | xargs -P 4 -I % wp plugin update --all --url=% --quiet
Sık Yapılan Hatalar
Network yönetiminde en çok karşılaşılan sorunlardan biri --url parametresini unutmak. Özellikle gece yarısı acele bir işlem yaparken ana sitede işlem yapmak istiyorsunuz ama aklınızdan çıkıp başka bir sitede işlem yapıyorsunuz. Her zaman URL’yi açıkça belirtin.
Bir diğer yaygın hata ise eklentileri network seviyesinde devre dışı bırakmak yerine tek tek sitelerde devre dışı bırakmaya çalışmak. Eğer eklenti network genelinde aktifse, site bazlı devre dışı bırakamazsınız. Önce network seviyesinde devre dışı bırakmanız gerekir.
# Yanlış yaklaşım (network-aktif eklenti için çalışmaz)
wp plugin deactivate woocommerce --url=magazin.anasite.com
# Doğru yaklaşım
wp plugin deactivate woocommerce --network
Sonuç
WordPress Network yönetimi, başta karmaşık görünebilir ama WP CLI ile bu işler son derece sistematik hale geliyor. Tek tek admin panellerine girmek yerine, terminal üzerinden tüm ağı kontrol edebilmek hem zaman kazandırıyor hem de insan hatası riskini önemli ölçüde azaltıyor.
Özellikle birden fazla müşteri sitesi yöneten ajanslar için ya da kurumsal multisite kurulumları için bu komutları içeren otomasyon scriptleri hazırlamak, bakım işlerini ciddi ölçüde kolaylaştırır. Cronjob ile birleştirdiğinizde, güncellemeler, yedeklemeler ve sağlık kontrolleri tamamen otomatik hale gelebilir.
Burada anlattığımız wp site, wp network meta, wp super-admin ve diğer komutların tam parametre listesi için wp help site veya wp site list --help komutlarını kullanabilirsiniz. Her komutun kendi man sayfası var ve orada çok daha fazla örnek bulabilirsiniz. Pratik yaparken önce staging ortamında deneyin, üretim sistemlerinde doğrudan uygulamadan önce ne yaptığınızdan emin olun.
