Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/devburak/contexthub-wp-migrator/releases/download/v2.1.2/contexthub-migrator-2.1.2.zipContextHub Migrator - WordPress Plugin
WordPress içeriklerinizi ve medyalarınızı ContextHub'a güvenli ve kolay bir şekilde aktaran migration plugini.
🎯 Özellikler
- ✅ Toplu İçerik Migration: Seçtiğiniz tüm içerikleri tek seferde migrate edin
- ✅ Lexical JSON Dönüşümü: WordPress HTML içeriğini Lexical JSON formatına otomatik çevirir
- ✅ Medya Migration: Öne çıkan görselleri ve içerikteki tüm görselleri otomatik aktarır
- ✅ Kategori Eşleştirme: WordPress kategorilerinizi ContextHub kategorileri ile eşleştirin
- ✅ Batch Processing: Büyük miktarda içeriği kesintisiz migrate edin
- ✅ Migration Log: Tüm migration işlemlerini detaylı olarak takip edin
- ✅ API Token Auth: Güvenli API token kimlik doğrulaması
📋 Gereksinimler
- WordPress 6.2 veya üzeri
- PHP 7.4 veya üzeri
- ContextHub API erişimi
- ContextHub API Token (write yetkisi ile)
🚀 Kurulum
1. Plugin Dosyalarını Yükleyin
Plugin klasörünü WordPress wp-content/plugins/ dizinine kopyalayın:
cd /path/to/wordpress/wp-content/plugins/
git clone https://github.com/devburak/contexthub-wp-migrator.git contexthub-migrator
veya ZIP olarak yükleyin:
- Plugins → Add New → Upload Plugin
2. Plugin'i Aktifleştirin
WordPress Admin → Plugins → ContextHub Migrator → Activate
3. API Ayarlarını Yapın
- WordPress Admin → ContextHub → Settings
- Gerekli bilgileri girin:
- API URL:
https://api.ctxhub.net/api - API Token: ContextHub'dan aldığınız token (ctx_ ile başlamalı)
- Tenant ID: Opsiyonel override. Token tenant kapsamlıysa boş bırakabilirsiniz
- Recovery Mode: Mevcut R2 objelerini yeniden upload etmeden eşleştirmek için açın
- API URL:
- Bağlantıyı Test Et butonuna tıklayarak bağlantıyı doğrulayın
- Ayarları Kaydet
📖 Kullanım Kılavuzu
Adım 1: Kategori Eşleştirmesi
WordPress Admin → ContextHub → ContextHub
- Kategori Eşleştirmesi bölümünde WordPress kategorilerinizi göreceksiniz
- Her kategori için ContextHub'daki karşılığını seçin
- Mevcut kategorilerden birini seçebilirsiniz
- Veya "Yeni Oluştur" seçerek otomatik oluşturabilirsiniz
Adım 2: İçerik Seçimi
-
İçerik Seçimi bölümünde migrate edilecek içerikleri seçin
-
Kolay seçim için:
- Tümünü Seç: Tüm içerikleri seç
- Seçimi Kaldır: Tüm seçimleri kaldır
- Sadece Migrate Edilmemiş: Sadece henüz migrate edilmemiş içerikleri seç
-
Manuel olarak da checkbox'ları kullanarak seçim yapabilirsiniz
Adım 3: Migration Başlat
- Görselleri de migrate et seçeneğini işaretleyin (önerilir)
- Migration Başlat butonuna tıklayın
- Onay dialogunda "OK" deyin
Migration İzleme
Migration başladıktan sonra:
- İlerleme çubuğu ile progress takibi
- Real-time log çıktısı
- Her içerik için başarı/hata durumu
Migration tamamlandığında sayfa otomatik yenilenir.
🔧 Teknik Detaylar
İçerik Dönüşümü
Plugin, WordPress HTML içeriğini Lexical JSON formatına çevirir:
Desteklenen HTML Elementleri:
- Paragraflar (
<p>) - Başlıklar (
<h1>-<h6>) - Listeler (
<ul>,<ol>,<li>) - Alıntılar (
<blockquote>) - Linkler (
<a>) - Görseller (
<img>) - Kod blokları (
<pre>,<code>) - Yatay çizgiler (
<hr>) - Satır sonları (
<br>)
Desteklenen Formatlar:
- Bold (
<strong>,<b>) - Italic (
<em>,<i>) - Underline (
<u>) Code(<code>)
Medya Migration
- Featured Image: Öne çıkan görsel ContextHub'a yüklenir
- İçerik Görselleri: İçerikteki tüm
<img>taglerindeki görseller bulunur ve yüklenir - URL Güncelleme: Tüm görsel URL'leri otomatik olarak ContextHub URL'leri ile değiştirilir
- Caching: Bir kez yüklenen görseller cache'lenir, tekrar yüklenmez
API İletişimi
Plugin, ContextHub API'si ile şu şekilde iletişim kurar:
POST /api/media
- Medya dosyalarını yükler
- multipart/form-data
POST /api/contents
- İçerikleri oluşturur
- JSON body:
{
"title": "Post başlığı",
"slug": "post-slug",
"content": "{lexical json}",
"htmlContent": "<html>",
"categories": ["category-id"],
"featuredMedia": "media-id",
"status": "published",
"publishedAt": "2024-01-01T00:00:00Z",
"metadata": {
"wordpress_id": 123,
"migrated_at": "..."
}
}
GET /api/categories
- Kategorileri listeler
POST /api/categories
- Yeni kategori oluşturur
📊 Migration Log
WordPress Admin → ContextHub → Migration Log
Bu sayfada:
- Tüm migration işlemleri listelenir
- Her post için:
- WordPress Post ID
- Post Başlığı
- ContextHub ID
- Durum (Başarılı/Hata)
- Hata mesajı (varsa)
- Tarih
🗄️ Veritabanı
Plugin, migration durumunu takip etmek için bir tablo oluşturur:
wp_contexthub_migration_log
- id
- post_id (WordPress post ID)
- contexthub_id (ContextHub content ID)
- status (success/error)
- error_message
- created_at
- updated_at
🛡️ Güvenlik
- ✅ API Token ile kimlik doğrulama
- ✅ WordPress nonce kontrolü
- ✅ Capability check (manage_options)
- ✅ SQL injection koruması
- ✅ XSS koruması
- ✅ CSRF koruması
🐛 Sorun Giderme
"API bağlantı hatası"
- API URL'nin doğru olduğundan emin olun
- ContextHub API'nizin çalıştığını kontrol edin
- API Token'ın geçerli olduğunu kontrol edin
- Tenant ID boşsa token'ın tenant kapsamlı olduğundan emin olun
"Media upload failed"
- Görselin WordPress'te mevcut olduğundan emin olun
- Dosya izinlerini kontrol edin
- API Token'ın
writeyetkisine sahip olduğunu kontrol edin - ContextHub'da yeterli storage limitiniz olduğunu kontrol edin
"Migration çok yavaş"
- PHP
max_execution_timelimitini artırın - Daha az içerik seçerek parça parça migration yapın
- Sunucu kaynaklarını kontrol edin
"Görseller yüklenmiyor"
- PHP
upload_max_filesizevepost_max_sizelimitlerini kontrol edin - Görsellerin erişilebilir olduğundan emin olun
- ContextHub API'nin media endpoint'inin çalıştığını kontrol edin
📝 Changelog
Version 2.1.2 (2026-06-30)
- ✅ "Featured Video" (tagDiv) tespiti sağlamlaştırıldı: bilinen meta anahtarlarına ek olarak tüm post meta değerleri YouTube/Vimeo URL'si için taranıyor; böylece video linki hangi meta anahtarında olursa olsun bulunuyor
- ✅ Gallery API istemci desteği eklendi; bağlı galeriler tekrar migrasyonda bulunup güvenli biçimde güncellenebiliyor
- ✅ Tekil görsel node'larında oluşan iç içe Lexical child dizisi ve uyumsuz caption nesnesi düzeltilerek editör parse hataları giderildi
Version 2.1.1 (2026-06-29)
- ✅ İçerik görselleri artık dosya adından attachment tahmini yapmadan, içerikteki tam URL'nin byte'ları WordPress'ten indirilip ContextHub'a yüklenerek migrate ediliyor; dönen URL/id içeriğe yazılıyor
- ✅ Boyutlu URL'lerin (
1-673x420.jpg) alakasız dosyalarla (bg21.jpg,back-11.jpg) eşleşip yanlış görsel gömmesi sorunu giderildi - ✅ Attachment çözümleme yalnızca tam-yol eşleşmesiyle ve indirme başarısız olursa son çare olarak kullanılıyor;
LIKE %ad%tahmini kaldırıldı - ✅ Medya sekmesindeki "Cache'i Temizle" butonu artık gerçekten çalışıyor; yanlış eşleşmiş kayıtları sıfırlayıp yeniden migrate etmeyi sağlıyor
- ✅ Lazy-load görseller (
data-src/data-srcset),figcaption, linktarget/relve medya id'leri Lexical'e doğru taşınıyor - ✅ İçerik listesinde sayfa başına 20 / 50 / 100 seçeneği eklendi
- ✅ Video post-format desteği: gövdede olmayan (tema meta'sındaki, ör. tagDiv
td_post_video) YouTube/Vimeo videoları çıkarılıp ContextHub'a URL videosu olarak kaydediliyor, gövde sonuna video node olarak ekleniyor vevideoUrl/videoMediaId/videoProvidercustom field'larına yazılıyor (tanımlar tenant'ta yoksa otomatik oluşturuluyor)
Version 2.0.7 (2026-04-09)
- ✅
old.kesk.org.tr,kesk.org.trvewww.kesk.org.trartık aynı internal uploads ailesi olarak ele alınıyor - ✅
http://www.yeni.http://kesk.org.tr/...gibi bozuk legacy URL'ler, hedef dosyahttps://old.kesk.org.tr/...üstünde duruyorsa recovery akışında daha güvenli eşleşiyor
Version 2.0.6 (2026-04-09)
- ✅ Medya ekranına sadece DB recovery modu eklendi; mevcut R2 objelerini yeniden upload etmeden görünür hale getirmek için yayınlanmış içerikler taranabiliyor
- ✅ Bozuk legacy URL'ler (
http://www.yeni.http://...) normalize edilipold.ve diğer alias host varyantları üzerinden yeniden deneniyor - ✅
register-existingakışı birden fazla aday kaynak URL ile çalışarak kurtarma eşleşmesini güçlendiriyor
Version 2.0.5 (2026-04-07)
- ✅ Stale içerik recovery sırasında slug/publishAt lookup 404 dönerse artık hata sayılmıyor; güvenli create/update fallback'e devam ediliyor
Version 2.0.4 (2026-04-07)
- ✅ Eski
_contexthub_idartık boşa düşmüşse migration gerçek çalışmadaContent not foundile kırılmıyor - ✅ Stale içerik ID tespit edilince plugin ID’yi temizleyip slug ve publishAt üzerinden güvenli hedefi yeniden çözüyor
Version 2.0.3 (2026-04-07)
- ✅ Kategori ekranı artık ContextHub kategorilerini
flatmodda çekiyor; alt kategoriler de listeleniyor - ✅
Slug already in use for this tenantdurumunda mevcut kategori bulunup eşleştirme sürdürülüyor
Version 2.0.2 (2026-04-07)
- ✅ Duplicate-safe content upsert eklendi
- ✅ Aynı slug için publishAt penceresinde güvenli eşleşme yoksa overwrite engellendi
- ✅ Tenant ID ayarı opsiyonel hale getirildi; tenant token'dan çözülebilir
- ✅ Recovery mode'da mevcut R2 objelerini
register-existingile kaydetme akışı güçlendirildi
Version 1.0.0 (2025-10-21)
- ✨ İlk sürüm
- ✅ Toplu içerik migration
- ✅ Lexical JSON dönüşümü
- ✅ Medya migration
- ✅ Kategori eşleştirme
- ✅ Batch processing
- ✅ Migration log
🤝 Destek
Sorularınız için:
- GitHub Issues
- Email: support@contexthub.com
📄 Lisans
GPL v2 or later
👨💻 Geliştirici Notları
Kod Yapısı
contexthub-migrator/
├── contexthub-migrator.php # Ana plugin dosyası
├── includes/
│ ├── class-api-client.php # API iletişimi
│ ├── class-content-transformer.php # HTML → Lexical dönüşümü
│ ├── class-media-migrator.php # Medya migration
│ ├── class-admin.php # Admin interface
│ └── class-ajax-handler.php # AJAX handlers
├── assets/
│ ├── css/
│ │ └── admin.css # Admin styles
│ └── js/
│ └── admin.js # Admin scripts
└── README.md
Özelleştirme
Plugin'i özelleştirmek için:
-
Yeni HTML elementi desteği eklemek:
includes/class-content-transformer.php→parse_node()metodunu güncelleyin -
API endpoint'lerini değiştirmek:
includes/class-api-client.php→ İlgili metodları güncelleyin -
UI değişiklikleri:
includes/class-admin.php→ Render metodlarını güncelleyinassets/css/admin.css→ Stilleri düzenleyin
Hooks
Plugin, özelleştirme için hooklar sunar:
// Migration öncesi
add_action('contexthub_before_migrate_post', function($post_id, $post) {
// Custom logic
}, 10, 2);
// Migration sonrası
add_action('contexthub_after_migrate_post', function($post_id, $contexthub_id) {
// Custom logic
}, 10, 2);
// Content data'yı filtrele
add_filter('contexthub_content_data', function($data, $post) {
// Modify data
return $data;
}, 10, 2);
🎉 Başarılı Migration!
Plugin'i kullandığınız için teşekkürler. İyi migration'lar! 🚀
Releases
1 release. Each count is every asset in that release; expand a row for the breakdown.