Gereksinimler ve Ön Hazırlık
Sistemi kurmadan önce çalışma ortamınızın güncel olduğundan emin olmalısınız. WordPress üzerinde Ajax işlemleri için temel gereksinimler şunlardır:
- WordPress 6.5 veya üzeri bir sürüm (En güncel güvenlik yamaları için).
- PHP 8.2 veya üzeri (Performans ve tip güvenliği için).
- Temel düzeyde WordPress Hook (kanca) bilgisi (wp_enqueue_scripts, wp_ajax_ gibi).
- Tarayıcı konsolu (F12) ile hata ayıklama yeteneği.
Güvenlik için her zaman bir alt tema (child theme) veya özel bir eklenti (custom plugin) üzerinde çalışmanız önerilir. Ana tema dosyalarını doğrudan değiştirmek, güncelleme sonrası tüm emeklerinizin silinmesine neden olur.
Adım 1: WordPress Ajax Yapısını Tanımlama
WordPress'te Ajax kullanmanın en güvenli yolu, admin-ajax.php dosyasını hedefleyen doğru kancaları kullanmaktır. İlk olarak, JavaScript dosyamızı WordPress'e tanıtmalı ve Ajax URL'sini bu dosyaya aktarmalıyız.
function istatistik_sistemini_yukle() {
wp_enqueue_script('istatistik-js', get_stylesheet_directory_uri() . '/js/istatistik.js', array('jquery'), '1.0.0', true);
wp_localize_script('istatistik-js', 'ajax_obj', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('istatistik_guvenlik_dogrulamasi')
));
}
add_action('wp_enqueue_scripts', 'istatistik_sistemini_yukle');
Bu kod bloğu, istatistik.js dosyasını sisteme dahil eder ve ajax_obj adında bir nesne ile Ajax URL'sini ve güvenlik için gerekli olan "nonce" değerini JavaScript tarafına taşır.
Adım 2: Sunucu Tarafında İstatistik Verisini Hazırlama
Şimdi, Ajax isteğine cevap verecek olan PHP fonksiyonunu yazmalıyız. Bu fonksiyon, veritabanından gerçek istatistikleri çekecek ve JSON formatında döndürecektir.
function get_canli_istatistik_verisi() {
// Güvenlik: Nonce doğrulaması
check_ajax_referer('istatistik_guvenlik_dogrulamasi', 'security');
// Örnek: Veritabanından veri çekme
$aktif_kullanici = rand(10, 500); // Gerçek projede veritabanı sorgusu gelecek
wp_send_json_success(array(
'aktif_kullanici' => $aktif_kullanici,
'zaman' => current_time('mysql')
));
}
add_action('wp_ajax_get_istatistik', 'get_canli_istatistik_verisi');
add_action('wp_ajax_nopriv_get_istatistik', 'get_canli_istatistik_verisi');
Burada wp_ajax_ ve wp_ajax_nopriv_ kancaları, hem giriş yapmış hem de yapmamış kullanıcılar için fonksiyonun çalışmasını sağlar. check_ajax_referer ise isteğin sitenizden geldiğini kanıtlayan kritik bir güvenlik önlemidir.
Adım 3: JavaScript ile İsteği Tetikleme
İstatistiklerin sayfada canlı olarak güncellenmesi için setInterval kullanarak belirli aralıklarla sunucuya istek göndermeliyiz. İşte istatistik.js içeriği:
jQuery(document).ready(function($) {
function istatistikleriGuncelle() {
$.ajax({
url: ajax_obj.ajax_url,
type: 'POST',
data: {
action: 'get_istatistik',
security: ajax_obj.nonce
},
success: function(response) {
if(response.success) {
$('#aktif-kullanici-sayisi').text(response.data.aktif_kullanici);
}
}
});
}
// Her 5 saniyede bir güncelle
setInterval(istatistikleriGuncelle, 5000);
});
Bu kod, her 5 saniyede bir sunucuya gider, veriyi alır ve HTML içindeki ilgili ID'ye sahip etiketi günceller. ajax_obj üzerinden gelen veriler, WordPress'in sunduğu güvenli kanalları kullanır.
Adım 4: İstatistik Verisini Görüntüleme
İstatistiklerin görüneceği yer için basit bir HTML yapısı oluşturun. İstatistikleri göstermek istediğiniz şablon dosyasına (örneğin footer.php veya page.php) şu kodu ekleyin:
Anlık Ziyaretçi Sayısı
Şu an sitede 0 kişi var.
Bu HTML yapısı, JavaScript'in veriyi basacağı hedef noktayı belirler. ID kullanımı, jQuery'nin veriyi doğru yere yerleştirmesini sağlar.
Adım 5: Yöntemlerin Karşılaştırılması
Canlı veri gösterimi için farklı yöntemler bulunmaktadır. Aşağıdaki tablo, geliştirdiğiniz Ajax sistemini alternatiflerle kıyaslar:
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Ajax (Polling) | Kolay kurulum, tüm sunucularda çalışır. | Sunucuya sürekli istek atar. |
| WebSockets | Gerçek zamanlı, düşük gecikme. | Sunucu yapılandırması zor ve maliyetli. |
| Server-Sent Events | Tek yönlü canlı akış için ideal. | Eski tarayıcı desteği sınırlı. |
Adım 6: Güvenlik ve Performans Optimizasyonu
Canlı sistemlerde veritabanı sorguları sitenizi yavaşlatabilir. İstatistiklerinizi doğrudan veritabanından çekmek yerine, WordPress Transient API (geçici veri depolama) kullanarak veriyi önbelleğe almalısınız.
function get_canli_istatistik_verisi() {
check_ajax_referer('istatistik_guvenlik_dogrulamasi', 'security');
$veri = get_transient('anlik_istatistik');
if (false === $veri) {
$veri = rand(100, 500); // Ağır sorgu buraya
set_transient('anlik_istatistik', $veri, 30); // 30 saniye boyunca önbellekle
}
wp_send_json_success(array('aktif_kullanici' => $veri));
}
Kritik Uyarı: Üretim ortamında (production) asla hata mesajlarını ekrana bastırmayın. Veritabanı sorgularınızda her zaman $wpdb->prepare() kullanarak SQL Injection saldırılarına karşı önlem alın. Kod güvenliği tamamen geliştiricinin sorumluluğundadır.
Sıkça Sorulan Sorular
Ajax isteği neden 403 hatası veriyor?
Bu genellikle nonce doğrulaması başarısız olduğunda gerçekleşir. wp_create_nonce ile oluşturulan değerin JavaScript tarafına doğru aktarıldığından ve check_ajax_referer fonksiyonunda aynı isimle kontrol edildiğinden emin olun.
Sunucum çok fazla istek alıyor, ne yapmalıyım?
İstek aralığını artırın (örneğin 5 saniye yerine 30 saniye) veya yukarıda bahsedilen Transient API yöntemini kullanarak veritabanı üzerindeki yükü hafifletin.
Mobil cihazlarda bu sistem çalışır mı?
Evet, Ajax tamamen tarayıcı tabanlıdır ve tüm modern mobil tarayıcılar tarafından desteklenir. Sadece internet bağlantısının kesilmesi durumunda hata yönetimi (error handling) eklemeniz önerilir.
Veritabanı sorgusunu nasıl optimize ederim?
Eğer çok büyük bir veritabanınız varsa, tüm kullanıcıları saymak yerine sadece belirli bir zaman aralığındaki oturumları sayan bir tablo yapısı kurun ve INDEX kullanın.
Bu sistemi özel bir eklentiye nasıl dönüştürürüm?
Kodlarınızı wp-content/plugins/ozel-istatistik/ dizininde bir PHP dosyasına taşıyın ve dosyanın en üstüne standart WordPress eklenti başlıklarını ekleyerek aktif edin.
İleri Seviye Veri Görselleştirme: Chart.js Entegrasyonu
Sadece sayısal verileri ekranda göstermek yerine, bu verileri görselleştirmek kullanıcı deneyimini önemli ölçüde artırır. Ajax üzerinden çektiğiniz anlık verileri Chart.js kütüphanesi ile dinamik grafiklere dönüştürebilirsiniz. Bu işlem için öncelikle kütüphaneyi temanıza veya eklentinize dahil etmeniz gerekir.
Aşağıdaki kod bloğu, Ajax'tan gelen veriyi alıp mevcut bir canvas elementine nasıl işleyeceğinizi gösterir:
// JavaScript: Grafik güncelleme fonksiyonu
function updateChart(newData) {
const ctx = document.getElementById('istatistikGrafigi').getContext('2d');
// Eğer grafik zaten varsa verisini güncelle
if (window.myChart) {
window.myChart.data.datasets[0].data.push(newData);
window.myChart.update();
} else {
// İlk kurulum
window.myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ['Şimdi'],
datasets: [{
label: 'Anlık Ziyaretçi',
data: [newData],
borderColor: '#0073aa',
fill: false
}]
}
});
}
}
Sistem Testi ve Hata Ayıklama Stratejileri
Canlı bir sistemde Ajax isteklerinin başarısız olması, kullanıcı arayüzünde bozulmalara neden olabilir. Bu nedenle, geliştirme sürecinde hata ayıklama (debugging) süreçlerini otomatize etmek kritiktir. Tarayıcı konsolunu takip etmek yerine, sunucu tarafında hataları bir log dosyasına yazdırarak izlemek en sağlıklı yöntemdir.
Ajax Hatalarını İzleme Yöntemi
Sunucu tarafındaki wp_ajax_ fonksiyonunuzun içerisine bir hata yakalayıcı (try-catch bloğu) ekleyerek, veritabanı sorgularınızın neden başarısız olduğunu wp-content/debug.log dosyasına yazdırabilirsiniz:
// PHP: Hata ayıklama loglama
add_action('wp_ajax_get_live_stats', 'get_live_stats_callback');
function get_live_stats_callback() {
try {
global $wpdb;
$result = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}sessions WHERE status = 'active'");
if ($result === null) {
throw new Exception("Veritabanı sorgusu başarısız oldu.");
}
wp_send_json_success($result);
} catch (Exception $e) {
error_log("İstatistik Hatası: " . $e->getMessage());
wp_send_json_error("Sistem geçici olarak meşgul.");
}
}
Test Kontrol Listesi
- Network Tabı: Tarayıcı geliştirici araçlarında 'Network' sekmesini açarak Ajax isteğinin 200 OK döndürdüğünden emin olun.
- JSON Formatı: Dönen verinin geçerli bir JSON formatında olup olmadığını kontrol edin.
- Önbellek (Cache): Eğer sunucuda Redis veya Memcached gibi bir önbellekleme sistemi varsa, Ajax isteğinizin önbelleğe takılmadığından emin olun (URL'ye rastgele bir parametre ekleyerek:
?v=timestamp). - Cross-Origin: Eğer Ajax isteği farklı bir alt alana (subdomain) yapılıyorsa, CORS başlıklarının doğru ayarlandığını doğrulayın.
Sonuç
WordPress ile özel bir Ajax canlı istatistik sistemi kurmak, sitenize dinamik bir yapı kazandırmanın en etkili yollarından biridir. Bu rehberde, güvenli veri çekme, önbellekleme ve kullanıcıya sunma süreçlerini adım adım tamamladık. Bir sonraki adım olarak, bu verileri Chart.js gibi bir kütüphane kullanarak grafiksel bir arayüzle görselleştirmeyi deneyebilirsiniz.


Yorumlar (0)
Yorum Yaz