Wordpress İle Özel Bir Ajax Arama Filtresi Nasıl Yapılır?

Wordpress İle Özel Bir Ajax Arama Filtresi Nasıl Yapılır?
Wordpress İle Özel Bir Ajax Arama Filtresi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu projeye başlamadan önce, üzerinde çalışabileceğiniz bir WordPress geliştirme ortamınızın olması gerekmektedir. Canlı sitenizde doğrudan değişiklik yapmadan önce yerel bir sunucu (LocalWP veya XAMPP gibi) kullanmanız önerilir. Ayrıca, bir alt tema (child theme) oluşturmuş olmanız, yaptığınız değişikliklerin tema güncellemeleriyle silinmemesi için şarttır.

  • WordPress 6.0 ve üzeri sürüm.
  • PHP 8.0 veya daha yeni bir sürüm.
  • Temel düzeyde HTML, CSS, PHP ve modern JavaScript bilgisi.
  • Kod düzenleyici (VS Code gibi).

Adım 1: Arama Formunu Hazırlama

İlk adım, kullanıcıdan girdi alacak olan HTML formunu oluşturmaktır. Bu formu temanızın uygun bir dosyasına (örneğin searchform.php veya doğrudan header içine) yerleştirebilirsiniz.




Adım 2: PHP ile AJAX İsteklerini İşleme

Ön uçtan gönderilen verileri karşılamak ve WordPress veritabanından doğru sonuçları çekmek için functions.php dosyanızda bir "hook" tanımlamanız gerekir. WordPress, AJAX isteklerini wp_ajax_ ve wp_ajax_nopriv_ ön ekleri ile yönetir.

Aşağıdaki kod bloğu, gelen arama terimini alır, bir WP_Query nesnesi oluşturur ve sonuçları JSON formatında geri döndürür:


function ajax_arama_sonuclari() {
    $arama_terimi = sanitize_text_field($_POST['keyword']);

    $args = array(
        's' => $arama_terimi,
        'post_status' => 'publish',
        'posts_per_page' => 5
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
            echo '
'; echo '' . get_the_title() . ''; echo '
'; endwhile; wp_reset_postdata(); else : echo '

Sonuç bulunamadı.

'; endif; die(); } add_action('wp_ajax_ajax_arama_sonuclari', 'ajax_arama_sonuclari'); add_action('wp_ajax_nopriv_ajax_arama_sonuclari', 'ajax_arama_sonuclari');

Adım 3: JavaScript ile AJAX İsteğini Tetikleme

Formdan alınan veriyi sunucuya göndermek ve gelen yanıtı sayfayı yenilemeden ekrana basmak için JavaScript (Fetch API veya jQuery) kullanmalıyız. WordPress'te AJAX URL'sini doğru tanımlamak için wp_localize_script fonksiyonunu kullanmak en güvenli yöntemdir.

Öncelikle functions.php içinde script dosyanızı kaydedin ve AJAX URL'sini tanımlayın:


wp_enqueue_script('ajax-arama-js', get_stylesheet_directory_uri() . '/js/arama.js', array('jquery'), '1.0', true);
wp_localize_script('ajax-arama-js', 'ajax_obj', array('ajax_url' => admin_url('admin-ajax.php')));

Ardından js/arama.js dosyanızda şu mantığı kurun:


document.getElementById('arama-inputu').addEventListener('keyup', function() {
    let keyword = this.value;
    let formData = new FormData();
    formData.append('action', 'ajax_arama_sonuclari');
    formData.append('keyword', keyword);

    fetch(ajax_obj.ajax_url, {
        method: 'POST',
        body: formData
    })
    .then(response => response.text())
    .then(data => {
        document.getElementById('sonuc-alani').innerHTML = data;
    });
});

Performans İpuçları ve Optimizasyon

AJAX aramaları, her tuş vuruşunda veritabanına sorgu gönderdiği için yoğun trafikli sitelerde sunucuyu yorabilir. Bu durumu engellemek için şu stratejileri uygulayın:

  • Debounce Uygulayın: Kullanıcı yazmayı bıraktıktan 300-500ms sonra sorgu gönderilmesini sağlayın. Bu, gereksiz veritabanı yükünü %80 oranında azaltır.
  • Minimum Karakter Sınırı: Kullanıcı en az 3 karakter girmeden AJAX sorgusunu tetiklemeyin.
  • Transient API Kullanımı: Çok sık aranan terimler için sonuçları WordPress Transient API ile geçici olarak önbelleğe alın.

Arama sonuçlarını yönetirken sanitize_text_field kullanarak SQL injection risklerini bertaraf ettiğinizden emin olun. Ayrıca, arama sonuçlarını döndürürken gereksiz veritabanı sütunlarını çekmemek için WP_Query parametrelerini optimize edin.

Bu yazıya tepkinizi paylaşın:
Kerem Demir

Dijital araçlar ve kişisel verimlilik üzerine uzmanlaşmış profesyonel bir yazarım. Karmaşık konuları basit ve anlaşılır kılmak için rehber odaklı içerikler üretiyorum.

Yorumlar (16)

16
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Leyla Er
Leyla Er 18 Temmuz 2026

Çok teknik olmuş, biraz daha yeni başlayanlar için basitleştirilebilirdi sanki.

Orkun Şahin
Orkun Şahin 23 Temmuz 2026

Kodlar çalışıyo arkadaşlar, ben denedim gayet hızlı tepki veriyo. Paylaşım için sağol.

Gülşah Aydın
Gülşah Aydın 23 Temmuz 2026

Mobil cihazlarda arama kutusu biraz kaydı, CSS kısmını biraz daha responsive yapmak için ne ekleyebiliriz?

Kerem Demir
Kerem Demir 25 Temmuz 2026

Gülşah, CSS'te 'max-width: 100%' değerini kontrol edip media query ekleyerek sorunu çözebilirsin.

Fatih Terzi
Fatih Terzi 26 Temmuz 2026

Abi ellerine saglık harika bi içerik olmus, uzun zamandır böyle temiz kodlu bi anlatım arıyodum.

Deniz Yıldız
Deniz Yıldız 28 Temmuz 2026

Süper anlatım olmuş, tam da ihtiyacım olan şeydi. Hemen deniyorum.

Kerem Demir
Kerem Demir 29 Temmuz 2026

Kolay gelsin Deniz, takıldığın yer olursa sorabilirsin.

Emre Gök
Emre Gök 30 Temmuz 2026

Görsellerle desteklenseydi daha iyi olurdu ama yine de açıklayıcı. Emeğine sağlık.

Zeynep Aras
Zeynep Aras 01 Ağustos 2026

Bunu yapmak için eklenti kullanmak daha mantıklı değil mi? Kodla uğraşmak biraz riskli sanki güncellemeler gelince.

Hakan Vural
Hakan Vural 01 Ağustos 2026

Eklenti siteyi çok yavaşlatıyor Zeynep, kodla yapınca çok daha hafif oluyor bence.

Mertcan Kaya
Mertcan Kaya 02 Ağustos 2026

Çok detaylı olmuş, teşekkürler. Elementor ile uyumlu çalışır mı bu yöntem?

Kerem Demir
Kerem Demir 02 Ağustos 2026

Mertcan, Elementor'un kendi widget'ları ile çakışabilir. Özel bir HTML bloğu içine gömerek denemen gerekebilir.

Selin Şen
Selin Şen 03 Ağustos 2026

Ya ben kodları ekledim ama arama çubuğu bir türlü çalışmıyo. Console'da hata veriyor ama çözemedim, yardımcı olur musun?

Burak Öz
Burak Öz 04 Ağustos 2026

Selin, functions.php içindeki wp_localize_script kısmını kontrol ettin mi? Genelde url yolu yanlış olunca hata veriyor.

Caner Yılmaz
Caner Yılmaz 05 Ağustos 2026

Harika bir rehber olmuş eline sağlık Kerem hocam. Özellikle performans kısmındaki veritabanı sorgusu ipucu çok işime yaradı.

Kerem Demir
Kerem Demir 06 Ağustos 2026

Beğenmene sevindim Caner, o sorgu optimizasyonu gerçekten çok kritik, yoksa site şişiyor.

Yorum Yaz