Gereksinimler ve Ön Hazırlık
Dinamik bir veri aktarım sistemi oluşturmadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. 2026 standartlarına uygun bir WordPress kurulumu için aşağıdaki araçlara ihtiyacınız vardır:
- PHP 8.2 veya üzeri: Performans ve güvenlik iyileştirmeleri için gereklidir.
- WordPress 6.x+: Güncel REST API ve veritabanı sınıflarını kullanmak için şarttır.
- WP-CLI: Büyük veri setlerini terminal üzerinden test etmek ve hata ayıklamak için en verimli araçtır.
- Geliştirme Ortamı: LocalWP veya benzeri bir yerel sunucu ortamı.
Kodlarınızı doğrudan ana temanın functions.php dosyasına yazmak yerine, her zaman özel bir eklenti (plugin) oluşturmanızı öneririm. Bu, kodunuzun tema değişikliklerinden etkilenmemesini sağlar.
Veri Kaynağını Belirleme ve Bağlantı Kurma
Dinamik veri aktarımında ilk adım, verinin çekileceği kaynağı (endpoint) doğru yapılandırmaktır. WordPress'in yerleşik wp_remote_get() fonksiyonu, dış API'lere güvenli bir şekilde bağlanmanızı sağlar.
function veri_cek_ve_isle() {
$api_url = 'https://api.ornek-site.com/v1/urunler';
$response = wp_remote_get($api_url, array('timeout' => 30));
if (is_wp_error($response)) {
return 'Bağlantı hatası: ' . $response->get_error_message();
}
$data = json_decode(wp_remote_retrieve_body($response), true);
return $data;
}
Bu fonksiyon, API'den gelen veriyi JSON formatından PHP dizisine dönüştürür. timeout parametresini 30 saniye olarak ayarlamak, sunucunun yanıt vermediği durumlarda işlemin kilitlenmesini önler.
WordPress Veritabanına Veri Kaydetme
Veriyi çektikten sonra, bu veriyi WordPress'in wp_insert_post() fonksiyonu ile post olarak kaydetmemiz gerekir. Güvenlik için verileri mutlaka sanitize_text_field() gibi filtrelerden geçirmelisiniz.
function veritabanina_kaydet($post_baslik, $post_icerik, $ozel_fiyat) {
$yeni_post = array(
'post_title' => sanitize_text_field($post_baslik),
'post_content' => wp_kses_post($post_icerik),
'post_status' => 'publish',
'post_type' => 'post'
);
$post_id = wp_insert_post($yeni_post);
if ($post_id) {
update_post_meta($post_id, '_urun_fiyat', sanitize_text_field($ozel_fiyat));
}
}
Burada wp_kses_post kullanarak içerikteki zararlı HTML etiketlerinin temizlenmesini sağlıyoruz. update_post_meta ile ürün fiyatı gibi özel verileri meta tablolarında saklıyoruz.
Veri Aktarımında Performans ve Önbellekleme
Dinamik veri aktarımı sırasında her sayfa yüklenişinde API'ye istek atmak sunucunuzu yavaşlatır. Bunun yerine WordPress Transients API kullanarak veriyi belirli bir süre önbelleğe almalısınız.
function get_cached_data() {
$data = get_transient('api_verisi_cache');
if (false === $data) {
$data = veri_cek_ve_isle();
set_transient('api_verisi_cache', $data, 12 * HOUR_IN_SECONDS);
}
return $data;
}
Bu yöntem, API isteğini 12 saat boyunca bir kez yapılmasını sağlar. Bu, hem sitenizin hızını artırır hem de API limitlerine takılmanızı engeller.
Karşılaştırmalı İçe Aktarma Yöntemleri
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| WP-Cron | Otomatik, arka planda çalışır. | Zamanlama hassasiyeti düşüktür. |
| REST API | Modern, esnek, hızlı. | Sunucu kaynaklarını tüketebilir. |
| WP-CLI | Çok büyük veriler için ideal. | Sunucu erişimi gerektirir. |
Güvenlik ve Hata Ayıklama
Kritik Uyarı: Harici verilerle çalışırken SQL Injection ve XSS saldırılarına karşı her zaman WordPress'in $wpdb->prepare() metodunu kullanın. Kullanıcıdan gelen veya dış kaynaktan alınan veriyi asla doğrudan veritabanına sorgu olarak göndermeyin.
Hata ayıklamak için WP_DEBUG modunu aktif edin. Ayrıca, işlemlerinizi loglamak için error_log() fonksiyonunu kullanarak sistemin arka planda ne yaptığını takip edebilirsiniz.
if (is_wp_error($post_id)) {
error_log('İçe aktarma hatası: ' . $post_id->get_error_message());
}
Sıkça Sorulan Sorular
WP-Cron ile veri aktarımı neden bazen çalışmıyor?
WP-Cron, WordPress'e bir ziyaretçi geldiğinde tetiklenir. Eğer sitenize trafik azsa, görevler zamanında çalışmayabilir. Bu durumda sunucu seviyesinde bir "System Cron" kurmanız önerilir.
İçe aktarılan verilerin güncellenmesini nasıl sağlarım?
Verileri çekerken her birine benzersiz bir "External ID" atayın. Yeni veri geldiğinde veritabanında bu ID'yi aratın; varsa wp_update_post() ile güncelleyin, yoksa wp_insert_post() ile yeni oluşturun.
Büyük veri setlerinde zaman aşımı hatasını nasıl çözerim?
İşlemi küçük parçalara (batch) bölün. Örneğin, bir seferde 100 kayıt yerine 20 kayıt işleyin ve işlemi bir sonraki cron döngüsüne bırakın.
JSON dışındaki formatlar desteklenir mi?
Evet, XML için simplexml_load_string(), CSV için ise PHP'nin fgetcsv() fonksiyonlarını kullanarak benzer mantıkla veri işleyebilirsiniz.
Veri aktarımı sırasında sitenin yavaşlamasını nasıl önlerim?
Veri işleme süreçlerini ana iş parçacığı yerine arka plan kuyruk sistemleri (Action Scheduler gibi) kullanarak yönetebilirsiniz.
İleri Seviye Veri Senkronizasyonu: Action Scheduler Kullanımı
WordPress'in yerleşik WP-Cron sistemi, düşük trafikli sitelerde tetiklenme sorunları yaşayabilir. Profesyonel projelerde, veri aktarımının garantili ve ölçeklenebilir olması için Action Scheduler kütüphanesi önerilir. WooCommerce tarafından da kullanılan bu sistem, görevleri veritabanında bir kuyruk yapısında tutar ve zaman aşımı riskini minimize eder.
Aşağıdaki örnekte, bir veri aktarım görevini Action Scheduler ile nasıl planlayacağınızı görebilirsiniz:
// Görevi planla
if ( ! as_next_scheduled_action( 'my_custom_import_hook' ) ) {
as_schedule_recurring_action( strtotime( 'midnight' ), DAY_IN_SECONDS, 'my_custom_import_hook' );
}
// Görevi tanımla
add_action( 'my_custom_import_hook', 'run_my_custom_import_process' );
function run_my_custom_import_process() {
// Veri çekme ve işleme mantığı burada çalışır
$data = fetch_external_data();
process_and_save_data( $data );
}
Veri Doğrulama ve Hata Yönetimi İçin İleri Teknikler
Dış kaynaklardan gelen veriler her zaman beklenen formatta olmayabilir. Veritabanı bütünlüğünü korumak için "Gelen Veri Kontrol Katmanı" oluşturmak kritik bir öneme sahiptir. Özellikle wp_remote_get fonksiyonundan dönen verileri işlerken, HTTP durum kodlarını ve JSON yapısını şu şekilde kontrol etmelisiniz:
function fetch_and_validate_data( $url ) {
$response = wp_remote_get( $url, array( 'timeout' => 30 ) );
if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
error_log( 'Veri çekme hatası: ' . $url );
return false;
}
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body, true );
if ( json_last_error() !== JSON_ERROR_NONE || ! isset( $data['items'] ) ) {
error_log( 'Geçersiz JSON formatı.' );
return false;
}
return $data['items'];
}
Veri İşleme Performans Tablosu
İçe aktarma yöntemlerini ölçeklenebilirlik açısından karşılaştıralım:
| Yöntem | Performans | Güvenilirlik | Kullanım Alanı |
|---|---|---|---|
| WP-Cron | Düşük | Orta | Küçük ölçekli veriler |
| Action Scheduler | Yüksek | Çok Yüksek | Büyük veri setleri |
| WP-CLI | Çok Yüksek | Yüksek | Manuel/Sunucu bazlı tetikleme |
Profesyonel İpucu: Çok büyük veri setlerini (10.000+ satır) içe aktarırken, veriyi parçalara (batch) bölerek işleyin. Örneğin, her döngüde 50 kayıt işleyip sleep(1) fonksiyonu ile sunucuyu dinlendirmek, bellek (memory) limitlerinin aşılmasını engeller.
Sonuç
WordPress ile özel bir dinamik veri içe aktarma sistemi oluşturmak, doğru fonksiyonları ve güvenlik protokollerini kullandığınızda oldukça verimli bir süreçtir. Bu rehberde öğrendiğiniz wp_remote_get, wp_insert_post ve Transients API kullanımı, profesyonel bir entegrasyonun temel taşlarıdır.
Bir sonraki adım olarak, oluşturduğunuz bu sistemi bir "Admin Paneli" arayüzü ile yönetilebilir hale getirmeyi ve kullanıcıların manuel olarak "Veriyi Şimdi Güncelle" butonuna basabileceği bir yapı kurmayı deneyebilirsiniz. Kod güvenliğine her zaman öncelik vererek, projelerinizi ölçeklenebilir kılabilirsiniz.


Yorumlar (0)
Yorum Yaz