3 yıl boyunca dünyanın farklı noktalarındaki 25 limana ait kurumsal web sitesini tek bir WordPress Multisite altyapısı üzerinden yönettim. Hepsi birbirinin neredeyse klonu, ama her birinin kendi logosu, kendi rengi, kendi dilleri vardı. Bu yazıda hem nasıl kurduğumuzu hem de yol boyunca karşılaştığım — özellikle de internette pek yazılmayan WPML ACF Block duplicate sorununu ve çözümünü paylaşacağım.

Eğer benzer bir Multisite projesi düşünüyorsan, bu yazı sana üç önemli ders verecek: master site mantığıyla nasıl ölçeklenebilir bir yapı kurulur, çoklu dilde ACF Block kullanırken nelere dikkat edilmeli ve performans sorunlarını proaktif olarak nasıl önlersin.

Mimari: Master Site + 24 Klon

Multisite’a geçmeden önce ekipçe net bir karar verdik: Tek bir tema, tek bir kod tabanı, çoklu site. Her liman için ayrı tema yazmak ya da her birine farklı yapı kurmak hem bakım kabusu olurdu hem de tutarlılığı bozardı.

Ana akış şöyleydi:

İlk olarak master site sıfırdan kodlandı. Hem front-end hem back-end tarafında bütün şablonlar, ACF alanları, blocklar, dil yapısı ve genel davranış burada belirlendi. Master site, “olması gereken” referans halini temsil ediyordu.

Yeni bir liman eklenmesi gerektiğinde master site klonlanıyor, sonra yalnızca o limana özgü değişiklikler yapılıyordu:

Yapı bu kadar basitti çünkü asıl iş master’da bitmişti. Bir limanı kurmak yarım gün, bir sürü liman birden eklemek de katlanılabilir bir iş haline gelmişti.

Performans: 25 Site Tek Sunucu, Sorunsuz

Çoğu kişinin merak ettiği soru bu olur: “25 site tek WordPress kurulumunda nasıl performans gösterir?” Açıkça söyleyeyim yavaşlık ya da bellek sorunu yaşamadık. Çünkü bu konuyu en başından ciddiye aldık.

Yaptığımız temel optimizasyonlar:

Şu hatırlatmayı yapmam lazım: Multisite performansının %80’i doğru hosting seçimine bağlı. Paylaşımlı hostingde 25 siteli bir Multisite’ı çalıştırmaya kalkma bellek limitlerinden, eşzamanlı bağlantı sınırlarından ve dosya sistemi yavaşlığından dolayı sürekli sorun yaşarsın.

WPML ile Karşılaştığım En Sinsi Sorun: ACF Block Duplicate

Şimdi geleyim, bu yazıyı asıl yazma sebebime. Multisite + WPML + ACF Block kombinasyonunda öyle bir sorunla karşılaştım ki, çözümünü bulana kadar bayağı zorlandım. Internette de doğru düzgün yazılmamış.

Sorun nasıl ortaya çıkıyordu?

Sitelerin hepsi çift dilliydi (genelde İngilizce + yerel dil). İçerikler ACF Block’lar üzerine kuruluydu yani Gutenberg editöründe sürükle-bırak block’lar, ACF’in register_block_type ile kaydettiği custom block’lar.

Ana dilde her şey güzel çalışıyordu. Ama:

  1. Ana dil dışındaki bir dile geçildiğinde, ACF block’lar iki kere gösteriyordu. Yani sayfada her block ikiye katlanmış halde çıkıyordu.
  2. Ana dilde içerik güncellendiğinde, çevrili dildeki içerikler sıfırlanıyordu. Editör bir Türkçe blogun başlığını değiştirsin, İngilizce versiyonun içerikleri uçuyor.

Bu çok kritik bir veri kaybı senaryosu. Editörler farkında bile olmadan saatlerce yazdıkları içeriği kaybediyorlardı.

Sorunun kaynağı

Sorunun kökeninde WPML’in ACF Block’ları çevirme mantığı yatıyordu. WPML, ACF Group’ları çoklu dile çevirmeye çalışırken, blocklar üzerindeki alanların çeviri durumu (translation status) doğru ayarlanmamışsa, çevrili dilde block’u “yeni içerik” olarak yorumluyor ve mevcut içeriğin üzerine yazıyor ya da ikiye katlıyordu.

Çözüm: ACF Group’ların “Translate” durumunu doğru ayarlamak

Çözüm aslında basit ama bulması zaman alıyor: ACF Group field’larını WPML üzerinden “Not Translate” (çevirme) olarak işaretledim.

Bunun mantığı şu: Block’ların kendisi (yapısı) çevrilmiyor, sadece block içindeki text alanlar WPML’in String Translation üzerinden çevriliyor. Yapı tarafı ana dilden klonlanıyor ve çevrili dilde sadece metinler değişiyor.

Pratik adımlar:

  1. WordPress admin panelinde WPML → Settings → Custom Fields Translation alanına gel
  2. ACF Group’larını listele
  3. Her bir Group field’ını “Don’t translate” olarak işaretle
  4. Kaydet ve cache’i temizle

Bu değişiklikten sonra duplicate sorunu kayboldu, içerik güncellemeleri çevrili dildeki içerikleri etkilemez oldu.

Önemli not: Bu çözüm “block içindeki içerik metinleri çevrilmesin” demek değil. Sadece WPML’in block yapısını çift kayıt yapmasını engelliyoruz. Metinler hâlâ String Translation üzerinden normal şekilde çevriliyor.

Multisite Kuracaklara 2 Tavsiyem

Eğer bugün biri “Multisite kuracağım” diye benimle konuşsa, ilk söyleyeceğim iki şey şu olur:

1. Hosting seçimi pazarlık konusu değildir.

Multisite, paylaşımlı hostingin sınırlarını bir günde aşar. Tek bir kaynak yetersizliği bellek, eşzamanlı bağlantı, dosya sistemi I/O 25 sitenin hepsini aynı anda etkiler. Bu yapı için minimum gereksinim iyi yapılandırılmış bir VPS, ideal seçim ise WordPress’e özel managed hosting (WP Engine, Kinsta, SiteGround Cloud) sağlayıcılarıdır.

Hosting maliyeti, yaşayacağın downtime’ın, performans sorununun ve müşteri şikayetinin yanında küçük kalır. Burada yapılacak kısa vadeli tasarruf, uzun vadede çok daha pahalıya patlar.

2. Kullanıcı log’u tut.

Multisite’ta birden çok editor, content manager, marketing person aynı sistemde içerik düzenliyor. Bir gün biri bir şeyi siler, başka biri “ben silmedim” der, kimse hatırlamaz. Activity log plugin’i kur (örn. WP Activity Log). Kim ne zaman hangi siteye girdi, hangi sayfayı düzenledi, hangi ayarı değiştirdi hepsi kayıt altına alınsın. Hem hesap verebilirlik hem de hata ayıklama için altın değerinde.

Sonuç

WordPress Multisite, doğru kurgulandığında ölçeklenebilir, yönetilebilir ve sürdürülebilir bir altyapı. Ama “kurarım, çalışır” diye yaklaşırsan teknik borcun hızla birikir. Master site mantığını, performans optimizasyonunu ve özellikle çoklu dilde ACF Block davranışını baştan planlarsan, 25 değil 50 sitelik ağları bile rahatça yönetebilirsin.

WPML + ACF Block duplicate sorunu yaşıyorsan, ya da kendi Multisite projende takıldığın bir nokta varsa, iletişim formundan ulaşabilirsin. Aynı tuzaklara düşmüş başka birine yardımcı olmaktan memnuniyet duyarım.

WordPress performansını da önemsiyorsan, sitenin hızlandırmanın 6 adımını anlattığım yazıma göz atabilirsin.