Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. WordPress 6.5 ve üzeri sürümlerde PHP 8.2 veya daha yüksek bir sürüm kullanmanız, performans ve güvenlik açısından zorunludur.
- WordPress kurulu aktif bir geliştirme ortamı (Localhost veya staging).
functions.phpdosyasına veya özel bir eklenti dosyasına erişim.- Veritabanı işlemleri için temel SQL bilgisi.
- Temel düzeyde CSS (tasarım için).
Adım 1: Özel Yazı Tipi (Custom Post Type) Oluşturma
Fiyat karşılaştırma modülünün temelini, ürünleri saklayacağımız bir yapı oluşturur. "Ürünler" adında bir yazı tipi tanımlayarak işe başlıyoruz. Bu sayede standart blog yazılarından bağımsız bir veri yapısına sahip olacağız.
function fiyat_karsilastirma_cpt() {
register_post_type('urunler', array(
'labels' => array('name' => 'Ürünler', 'singular_name' => 'Ürün'),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
'show_in_rest' => true,
));
}
add_action('init', 'fiyat_karsilastirma_cpt');
Bu kod bloğu, WordPress yönetim paneline "Ürünler" menüsünü ekler. show_in_rest parametresi, Gutenberg editörü ile uyumlu çalışması için gereklidir.
Adım 2: Fiyat Verileri İçin Özel Alanlar (Meta Fields)
Ürünlerin fiyatlarını ve mağaza linklerini saklamak için özel alanlara ihtiyacımız var. add_meta_box fonksiyonu ile editör ekranına fiyat giriş alanları ekleyelim.
function urun_fiyat_meta_box() {
add_meta_box('fiyat_bilgisi', 'Fiyat ve Mağaza Bilgileri', 'urun_fiyat_callback', 'urunler', 'side');
}
add_action('add_meta_boxes', 'urun_fiyat_meta_box');
function urun_fiyat_callback($post) {
$fiyat = get_post_meta($post->ID, '_urun_fiyat', true);
echo 'Fiyat:';
}
Bu adım, her ürün için veritabanında _urun_fiyat anahtarıyla bir meta verisi oluşturmamıza olanak tanır. esc_attr fonksiyonu, XSS (Cross-Site Scripting) saldırılarını önlemek için veriyi temizler.
Adım 3: Dinamik Fiyat Karşılaştırma Mantığı
Şimdi en önemli kısım olan karşılaştırma mantığını kuruyoruz. Belirli bir ürün için farklı mağazalardaki fiyatları listeleyen bir fonksiyon yazacağız. Burada güvenlik için mutlaka $wpdb sınıfını kullanmalıyız.
function get_fiyat_karsilastirma($urun_id) {
global $wpdb;
// SQL Injection'a karşı prepare kullanımı
$results = $wpdb->get_results($wpdb->prepare(
"SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND meta_key = '_urun_fiyat'",
$urun_id
));
return $results;
}
Bu fonksiyon, veritabanından doğrudan ilgili ürünün fiyatlarını çeker. $wpdb->prepare kullanımı, SQL injection saldırılarını engellemek için hayati bir standarttır.
Adım 4: Kullanıcı Arayüzü (Shortcode Oluşturma)
Kullanıcıların bu modülü herhangi bir sayfada kullanabilmesi için bir shortcode (kısa kod) oluşturmalıyız. Bu kod, fiyatları bir tablo içerisinde gösterecektir.
function fiyat_tablosu_shortcode($atts) {
$a = shortcode_atts(array('id' => 0), $atts);
$fiyatlar = get_fiyat_karsilastirma($a['id']);
$html = 'Mağaza Fiyat ';
foreach($fiyatlar as $f) {
$html .= 'Örnek Mağaza '.esc_html($f->meta_value).' TL ';
}
$html .= '
';
return $html;
}
add_shortcode('fiyat_karsilastir', 'fiyat_tablosu_shortcode');
Bu kısa kod, [fiyat_karsilastir id="123"] şeklinde kullanıldığında, ilgili ürünün fiyatlarını dinamik bir tablo olarak ekrana basar.
Adım 5: Performans ve Önbellekleme
Fiyat karşılaştırma modülleri veritabanına çok fazla sorgu atabilir. Performansı artırmak için WordPress Transient API yapısını kullanarak sorgu sonuçlarını geçici olarak belleğe almalıyız.
function get_cached_fiyat($urun_id) {
$transient_key = 'fiyat_data_' . $urun_id;
$data = get_transient($transient_key);
if (false === $data) {
$data = get_fiyat_karsilastirma($urun_id);
set_transient($transient_key, $data, 12 * HOUR_IN_SECONDS);
}
return $data;
}
Bu yöntem, her sayfa yenilemesinde veritabanına gitmek yerine, fiyatları 12 saat boyunca bellekte tutar. Bu, sitenizin hızını ciddi oranda artırır.
Karşılaştırma Tablosu: Yöntemler ve Avantajlar
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Custom Meta Fields | Hızlı ve hafif | Çoklu mağaza yönetimi zor |
| Custom Database Table | Yüksek performans | Karmaşık SQL sorguları gerektirir |
| API Entegrasyonu | Otomatik güncel veri | Dış servise bağımlılık |
Kritik Güvenlik Uyarısı: Veritabanı sorgularında her zaman $wpdb->prepare kullanın. Kullanıcıdan alınan hiçbir veriyi doğrudan SQL sorgusuna dahil etmeyin. Üretim ortamında hata ayıklama (debug) modunu kapatmayı unutmayın.
Sıkça Sorulan Sorular
Fiyatlar otomatik güncellenebilir mi?
Evet, bir cron job (zamanlanmış görev) kullanarak dış API'lardan verileri çekip veritabanınızı otomatik güncelleyebilirsiniz.
Bu modül yavaşlamaya neden olur mu?
Transient API kullanmadığınız sürece veritabanı yükü artabilir. Önbellekleme stratejisi ile bu risk minimize edilir.
Farklı para birimleri eklenebilir mi?
Evet, meta verisi olarak para birimi türünü de kaydederek tablo yapısında dinamik bir şekilde gösterebilirsiniz.
Mobil uyumluluk nasıl sağlanır?
Tablo yapısını CSS'de overflow-x: auto özelliği ile sarmalayarak mobil cihazlarda kaydırılabilir hale getirebilirsiniz.
Güvenlik için başka ne yapılabilir?
Veri girişlerinde nonce kullanarak form gönderimlerinin doğruluğunu kontrol edebilirsiniz.
Gelişmiş Entegrasyon: REST API ile Otomatik Fiyat Güncelleme ve Senkronizasyon
Fiyat karşılaştırma modülünün manuel olarak güncellenmesi, yüzlerce ürünün bulunduğu aktif bir e-ticaret platformunda sürdürülebilir değildir. Modülün gerçek anlamda dinamik ve otonom çalışabilmesi için harici e-ticaret API'lerinden (XML, JSON veya REST API) veri çekebilecek ve bu verileri arka planda güncelleyecek bir senkronizasyon mekanizmasına ihtiyaç vardır. WordPress'in sunduğu WP-Cron sistemi ve HTTP API bileşenleri, bu işlemi güvenli ve performanslı bir şekilde gerçekleştirmek için en ideal araçlardır.
Aşağıdaki gelişmiş kod bloğu, belirli aralıklarla tetiklenen bir WP-Cron görevi tanımlar. Bu görev, sistemdeki tüm karşılaştırma ürünlerini tarar, her ürünün harici API kaynaklarındaki güncel fiyatlarını çeker ve WordPress veritabanındaki (post meta) alanları otomatik olarak günceller.
/**
* WP-Cron için özel bir zaman aralığı (3 saatte bir) tanımlayalım.
*/
add_filter('cron_schedules', 'wpc_add_three_hourly_cron_schedule');
function wpc_add_three_hourly_cron_schedule($schedules) {
$schedules['three_hourly'] = array(
'interval' => 10800, // Saniye cinsinden 3 saat
'display' => __('Her 3 Saatte Bir', 'wp-karsilastirma')
);
return $schedules;
}
/**
* Cron görevinin tanımlanması ve etkinleştirilmesi.
*/
register_activation_hook(__FILE__, 'wpc_activation_cron_setup');
function wpc_activation_cron_setup() {
if (!wp_next_scheduled('wpc_price_
Sonuç
WordPress ile özel bir fiyat karşılaştırma modülü geliştirmek, sitenizin teknik kapasitesini artırırken kullanıcılarınıza da büyük değer katar. Bu rehberde öğrendiğiniz Custom Post Type, Meta Fields ve Transient API kullanımı, profesyonel bir WordPress geliştiricisi olma yolunda atılan temel adımlardır.
Bir sonraki adım olarak, bu modülü bir "Fiyat Alarmı" özelliği ile genişleterek kullanıcıların fiyat düştüğünde e-posta almasını sağlayacak bir yapı kurmayı deneyebilirsiniz.


Yorumlar (0)
Yorum Yaz