ACF Pro’nun flexible content alanını ilk keşfettiğimde tam sayfa builder gibi kullanma sevdasına düştüm. Elbow grease ile 30 layout tanımladım, müşteri “artık her sayfayı ben yaparım” dedi. Üç ay sonra admin paneli 45 saniyede açılmaya başladı, veri tabanı post_meta tablosu 200 bin satırı geçti. Doğruyu yanlış bilmişim.
ACF Pro’nun en güçlü alanları doğru kullanılınca hayat kurtarıyor, yanlış kullanılınca ayağınıza dolanıyor. İki tanesini ayrıntıyla anlatayım.
Flexible content
Mantık basit. Bir dizi “layout” tanımlıyorsunuz (hero, gallery, testimonial, CTA vs), editör sayfayı bu layout’ları üst üste dizerek kuruyor. Her layout içinde kendi sub-field’ları var.
Avantajları:
– Editör özgür, tasarımcıya ihtiyaç duymadan sayfa kurabiliyor.
– Her layout temiz şekilde tema tarafında template-part olarak render ediliyor.
– Alan bazlı izin yönetimi daha kolay.
Tuzakları:
– Çok fazla layout eklerseniz panel yavaşlar, editörün kafası karışır.
– Her layout veri tabanında ayrı post_meta kaydı açar. 10 layout’lu bir sayfa 100’e yakın satır üretebilir.
– Performans için get_field her layout tipini ayrıca sorguluyor.
– Versiyonlama zor. Bir layout’u kaldırırsanız eski sayfalarda orphan veri kalır.
Kurallarım:
– Maksimum 8-10 layout. Daha fazlası site bütünlüğünü bozar.
– Her layout’un açık bir görevi olmalı. “Genel amaçlı text block” koymayın, editör her yere onu koyar ve tasarım tutarlılığı gider.
– Layout isimleri semantik olmalı, “layout_1” değil “service_grid”.
– have_rows döngüsünde performans için önce layout tipini sayın, değilse atlayın.
– Eski layout’ları silmeden önce migration script yazın, orphan veriyi temizleyin.
Clone field
Aynı alan grubunu birden fazla yerde kullanmak için. DRY ilkesine hizmet ediyor, ama prepend/display modlarına göre davranış değişiyor ve kafa karıştırıcı olabiliyor.
Modlar:
– Seamless: klonlanan alanlar doğrudan parent içinde gözükür, alan anahtarları (meta_key) aynı kalır.
– Group: klonlanan alanlar prefix ile gruplanır, erişim clone_name.subfield şeklinde olur.
Benim hatam, hero ve CTA gibi farklı yerlerde aynı button group’u seamless mode’da klonlamak oldu. Aynı meta_key iki farklı yerde çakıştı. Veri bozuldu. Group mode her zaman daha güvenli, bir prefix yüküne katlanıyorsunuz ama meta_key çakışması olmuyor.
Bir başka gotcha, clone field içinde flexible content kullanmak. Teknik olarak çalışıyor ama performans düşüyor ve JSON export/import tutarsız davranıyor. Kaçının.
Pratik örnek
Bir kurumsal sitede 12 hizmet sayfası vardı. Hepsi aynı yapıda: hero, benefits, features, pricing, FAQ, CTA. Flexible content ile herkes kendi sayfasını istediği gibi kurmasın diye pricing + FAQ gibi bölümleri clone field ile merkeze aldım. Editör sadece bir kez pricing bilgisini güncelliyor, 12 sayfa otomatik değişiyor. Clone field + option page ikilisi bu use case için harika çalıştı.
Ama başka projede, editör her sayfada farklı pricing göstermek istediğinde clone kullanmadım. Flexible content içinde pricing layout’u sağladım, sayfa bazlı özgürlük bıraktım. Merkezileşme ihtiyaca göre karar.
ACF JSON export ve git sync
ACF Pro’nun field group’larını acf-json/ klasörüne yazdırıp git’e koyabiliyorsunuz. Bu, ortamlar arası sync’i kolaylaştırıyor. Üretim veri tabanından şubeler arasında field tanımı kopyalamayı durdurmanın tek yolu bu. acf/settings/save_json ve acf/settings/load_json hook’larını theme içinde açın, field group’lar otomatik theme içinde versiyonlanır.
Veri temizliği
Bir projede migration yaparken orphan ACF post_meta’ları temizlemek gerekti. Şu sorgu işe yaradı:
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;Post silindiğinde meta otomatik silinmez eğer doğru hook kancalanmamışsa. Büyük sitelerde bu temizlik ciddi alan kazandırıyor.
Sonuç olarak, ACF Pro güçlü ama disiplinsiz kullanılırsa kendi canavarını yaratıyor. Alan sayısı, layout çeşitliliği ve clone kullanımında itidal editör deneyimini de, site hızını da koruyor.