Geçen yıl boyunca on bir WordPress kurulumunu JekCMS'e taşıdık. En büyüğü 3.247 gönderiye, 18 aktif eklentiye ve JekCMS veri modeliyle örtüşmeyen özel gönderi türü yapısına sahipti. Bu yazı, otomasyonun nerede işe yarayıp nerede yaramadığının dürüst bir değerlendirmesidir.
Standart WordPress verileri — gönderiler, sayfalar, kategoriler, etiketler, yazarlar ve öne çıkan görseller — sorunsuz taşınıyor. Taşıma betiği, yapılandırılmış tablo önekini kullanarak doğrudan WordPress veritabanından okuyor ve tek bir işlemle JekCMS şemasına yazıyor. Her iki veritabanı aynı ya da farklı sunucularda çalışabilir; betik ayrı PDO bağlantıları kullanıyor. 3.000 gönderi için ortalama taşıma süresi 4–6 dakika.
Özel Gönderi Türleri: Asıl Karmaşıklık Burada
Özel gönderi türleri asıl zorluğu oluşturuyor. JekCMS esnek bir meta anahtar-değer sistemiyle tek bir gönderi türüne sahip; WordPress'in özel gönderi türleri ise tamamen farklı editoryal iş akışlarına karşılık geliyor.
Her özel gönderi türü için belirli meta anahtarlarla bir JekCMS gönderisi mi, özel bir veritabanı tablosu mu yoksa JekCMS kategorileri kümesi mi olacağına karar vermeniz gerekiyor. Karar, özel gönderi türü içeriğinin ana gönderi akışında görünmesi gerekip gerekmediğine ya da bağımsız bir bölüm olarak var olup olmadığına bağlı.
ACF Alanlarını Eşleştirmek
ACF alanları bir yapılandırma dosyasında açık eşleme gerektiriyor. Taşıma araçları dizininde ACF alan adlarını JekCMS meta anahtarlarıyla eşleştiren bir field_map.php oluşturun: 'acf_subtitle' => 'post_subtitle'. Boolean ACF alanları JekCMS gönderi meta verilerinde 0/1 tamsayı değerleri oluyor. Tekrarlayan alanlar tek bir meta değeri olarak JSON kodlanıyor — şablonlarınızın bu değerler üzerinde yineleme yapması gerekiyorsa özel bir sorgu yardımcısı oluşturmanız gerekiyor.
Taşıma Sonrası URL Denetimi
Taşıma tamamlandıktan sonra Screaming Frog kullanarak her iki siteyi paralel olarak tarayın. Durum kodlarını ve yönlendirme zincirlerini karşılaştırın. JekCMS'te 404 döndüren her WordPress URL'si için bir yönlendirme girişi gerekiyor. JekCMS'in config/redirects.php dosyası kaynak → hedef çiftleri dizisini kabul ediyor ve ^/\?p=(\d+)$ => /posts/$1 gibi toplu yönlendirmeler için regex kalıplarını destekliyor. Bu adımı atlamamak SEO değerinin büyük bölümünü koruyor.
Tasima Betigi Mimarisi
Tasima araci komut satirindan calisan bagimsiz bir PHP betigidir. Ayri PDO baglantilari kullanarak her iki veritabanina es zamanli olarak baglanir. Tum islem bir veritabani transaction'i icinde calisir; herhangi bir adim basarisiz olursa her sey geri alinir.
php migrate.php \
--wp-host=localhost \
--wp-db=wordpress_site \
--wp-prefix=wp_ \
--jek-host=localhost \
--jek-db=jekcms_site \
--field-map=field_map.php \
--dry-run
Deneme Calistirmasi
Daima once --dry-run ile calistirin. Son commit haricinde her adimi calistirir ve tam olarak ne yazilacagini loglar. En buyuk tasimamizda (3.247 gonderi) deneme 2 dakika surdu ve 47 eslestirilemez ACF alani belirledi.
Gorsel Tasima: En Yavas Adim
WordPress medya eklerini indirip yeniden islemek toplam suresinin %70-80'ini olusturur. Gonderi basina ortalama 1,4 gorselle 3.000 gonderi icin yaklasik 4.200 gorsel islenir. --parallel=4 ayari isleme suresini 45 dakikadan 12 dakikaya dusurdu.
WordPress Kisa Kodlarini Yonetmek
[gallery]— eklenmis gorsel ID'leri okunarak JekCMS galeri bloguna donusturulur[embed]— ham URL ile degistirilir; oEmbed otomatik donusturur- Eklenti kisa kodlari — uyari olarak kaydedilir; gonderilerin %5-15'ini etkiler
SEO Verisi Koruma ve 301 Yonlendirmeler
Yoast SEO veya RankMath meta alanlari okunur ve JekCMS SEO meta anahtarlarina eslenir. Betik her URL kalip farkini iceren bir redirects.php dosyasi otomatik olusturur:
/YYYY/AA/GG/slug/→/slug(tarih kalici baglantilari duz URL'lere)/category/isim/→/category/isim(sondaki egikcizgi kaldirma)/?p=123→ gercek slug/wp-content/uploads/→/uploads/yollari
Ortalama 3.000 gonderili bir tasima 3.200-3.800 yonlendirme girisi olusturur. Google yeni URL'leri genellikle 2-4 hafta icinde yeniden indeksler.
Tasima Sonrasi Dogrulama
Tasima betigi tamamlandiktan sonra bir dogrulama asamasi WordPress kaynak ve JekCMS hedef veritabanlari arasindaki satir sayilarini karsilastirir. Beklenen fark %0-2'dir cunku bazi WordPress revizyonlari ve otomatik taslaklar kasitli olarak haric tutulur. Dogrulayici ayrica yetim iliskileri de kontrol eder: gonderisi olmayan kategoriler, silinmis gonderi ID'lerine isaret eden meta girisler ve fiziksel dosyasi eksik medya kayitlari.
Icerik Butunluk Kontrolleri
- HTML yapi dogrulamasi: kisa kod donusumunden sonra tum acilan etiketlerin duzgun kapatildigini dogrular
- Dahili baglanti yeniden yazimi: WordPress
/?p=ve/archives/URL'leri JekCMS slug tabanli yollara donusturulur - Gomulu medya denetimi:
<img>ve<video>kaynaklarinin uploads dizininde gercekten var olan dosyalara isaret ettigini dogrular - Karakter kodlamasi: UTF-8 sutununda depolanan Latin-1 kodlu Turkce karakterleri tespit eder ve onarir
- Yinelenen slug tespiti: iki WordPress gonderisi ayni temizlenmis slug'i paylastiginda
-2,-3son ekleri ekler
Geri Alma Stratejisi
Her tasima herhangi bir veri yazmadan once JekCMS veritabaninin tam SQL dump'ini olusturur. Dogrulama basarisiz olursa veya musteri ilk 48 saat icinde sorun bildirirse, bu dump'tan geri yukleme tipik 3.000 gonderili bir site icin 30 saniyenin altinda surer.
Tasima betigi ayrica gerceklestirdigi her INSERT ve UPDATE'i bir migration_log.json dosyasina kaydeder; bu da tam geri alma olmadan belirli islemleri secici olarak geri almayi mumkun kilar. Pratikte secici geri almalar tasimlarin yaklasik %8'inde gereklidir; en yaygin olarak ozel gonderi turu eslestirmesi beklenmedik sonuclar urettiginde kullanilir.