Wordpress İle Özel Bir Dinamik İçerik Yazdırma Filtresi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu uygulamayı gerçekleştirmek için yerel bir geliştirme ortamı (LocalWP, XAMPP veya Docker) üzerinde çalışan güncel bir WordPress kurulumuna ihtiyacınız vardır. 2026 yılı standartlarına uygun olarak, PHP 8.2 veya daha yeni bir sürüm kullanmanız önerilir.

  • Aktif bir WordPress site kurulumu.
  • Tema dosyalarına veya özel bir eklentiye erişim (functions.php veya bir .php dosyası).
  • Kod düzenleyici (VS Code önerilir).
  • WP_DEBUG modunun açık olması (Geliştirme aşamasında hataları görmek için).

Kodlarınızı doğrudan ana temanın functions.php dosyasına yazmak yerine, her zaman bir "Child Theme" (Alt Tema) veya özel bir eklenti dosyası kullanmanız, tema güncellemelerinde kodlarınızın kaybolmasını engeller.

Filtre Mantığını Anlamak: add_filter ve the_content

WordPress'te filtreler, bir veri değişkeni işlenmeden önce onu yakalayıp değiştirmenize olanak tanır. the_content filtresi, WordPress'in veritabanından aldığı post içeriğini ekrana yazdırmadan hemen önce tetiklenir. Bu, içerik içine dinamik olarak bir şeyler eklemek veya metni değiştirmek için en doğru noktadır.

// Temel filtre yapısı
function ozel_icerik_filtresi( $content ) {
    // İçerik üzerinde işlemler burada yapılır
    return $content;
}
add_filter( 'the_content', 'ozel_icerik_filtresi' );

Yukarıdaki kod, WordPress'in temel filtre mekanizmasını gösterir. $content değişkeni, gönderinin tüm HTML içeriğini tutar. Fonksiyonunuz mutlaka bu değişkeni geri döndürmelidir (return), aksi takdirde içeriğiniz sitede boş görünecektir.

Adım Adım: İçeriğe Dinamik Metin Ekleme

İçeriğin sonuna dinamik bir uyarı veya bilgilendirme metni eklemek, filtrelerin en yaygın kullanım alanıdır. Aşağıdaki örnekte, içeriğin sonuna otomatik olarak bir "Okuma Süresi" hesaplayıcısı ekleyeceğiz.

function icerik_sonuna_okuma_suresi_ekle( $content ) {
    if ( is_single() && in_the_loop() && is_main_query() ) {
        $kelime_sayisi = str_word_count( strip_tags( $content ) );
        $dakika = ceil( $kelime_sayisi / 200 );
        $ek_metin = '

Bu yazıyı okumak yaklaşık ' . $dakika . ' dakika sürecektir.

'; return $content . $ek_metin; } return $content; } add_filter( 'the_content', 'icerik_sonuna_okuma_suresi_ekle' );

Bu kod bloğunda, is_single() ile sadece tekil yazılarda çalışmasını sağladık. in_the_loop() ve is_main_query() kontrolleri ise filtrenin gereksiz yere yan menü veya arşiv sayfalarında tetiklenmesini engelleyerek performans sağlar.

Güvenli Filtreleme: XSS ve Veri Sanitizasyonu

Dinamik içerik yazdırırken en büyük risk Cross-Site Scripting (XSS) saldırılarıdır. Kullanıcıdan alınan veya veritabanından gelen veriyi ekrana basarken mutlaka temizlemelisiniz. WordPress'in esc_html() veya wp_kses() fonksiyonları bu noktada hayati öneme sahiptir.

function guvenli_icerik_filtresi( $content ) {
    // Sadece izin verilen HTML etiketlerine izin ver
    $izin_verilenler = array(
        'p' => array(),
        'em' => array(),
        'strong' => array(),
    );
    return wp_kses( $content, $izin_verilenler );
}
// Dikkat: Bu işlem içeriği kısıtlayabilir, dikkatli kullanın.

Kritik Güvenlik Uyarısı: İçerik filtrelerinde asla doğrudan $_GET veya $_POST verilerini işlemeyin. Eğer dış kaynaktan veri alıyorsanız, mutlaka sanitize_text_field() gibi WordPress güvenlik fonksiyonlarını kullanarak veriyi temizleyin ve veritabanı sorgularında $wpdb->prepare() kullanın.

İçerik İçinde Dinamik Reklam veya Kısa Kod Yerleştirme

İçeriğin belirli bir paragrafından sonra reklam veya özel bir blok eklemek, kullanıcı deneyimini artırabilir. Bunun için içeriği explode fonksiyonu ile parçalara ayırıp araya veri enjekte edebiliriz.

function icerik_arasina_reklam_ekle( $content ) {
    $paragraflar = explode( '

', $content ); if ( count( $paragraflar ) > 2 ) { $reklam = '
Buraya reklam kodunuz gelecek.
'; array_splice( $paragraflar, 2, 0, $reklam ); $content = implode( '

', $paragraflar ); } return $content; } add_filter( 'the_content', 'icerik_arasina_reklam_ekle' );

Bu yöntem, içeriğin 2. paragrafından sonra bir div bloğu yerleştirir. explode kullanarak içeriği HTML etiketlerine göre bölmek, dinamik yerleşimler için en pratik yoldur.

Yöntem Karşılaştırması: Filtreler vs. Shortcode

WordPress'te içerik değiştirmenin iki ana yolu vardır: Filtreler ve Shortcode'lar. Aşağıdaki tablo, bu iki yöntemin kullanım alanlarını özetlemektedir.

Özellik Filtreler (the_content) Shortcode ([kod])
Kullanım Otomatik, tüm içeriklerde Manuel, seçilen yerlerde
Kontrol Geliştirici kontrolünde İçerik editörü kontrolünde
Performans Yüksek (doğru kodlanırsa) Orta (çok sayıda ise)

Sıkça Sorulan Sorular

Filtreler neden tüm sayfalarda çalışıyor?

Eğer filtreniz arşiv sayfalarında veya widget alanlarında da çalışıyorsa, is_main_query() kontrolünü eklememiş olabilirsiniz. Filtrenin sadece ana döngüde çalıştığından emin olun.

İçeriği tamamen değiştirebilir miyim?

Evet, return kısmında $content değişkenini tamamen başka bir metinle değiştirirseniz, orijinal içerik kaybolur. Ancak bu genellikle önerilmez.

Performans kaybı yaşar mıyım?

Eğer filtre içinde karmaşık veritabanı sorguları (SQL) yaparsanız siteniz yavaşlar. Mümkünse verileri get_transient() ile önbelleğe alın.

Filtre önceliğini nasıl ayarlarım?

add_filter( 'the_content', 'fonksiyon_adi', 20 ); şeklinde 3. parametre ile önceliği belirleyebilirsiniz. Sayı büyüdükçe filtre daha geç çalışır.

Hata ayıklama (debug) için ne yapmalıyım?

error_log() fonksiyonunu kullanarak filtre içindeki değişkenleri wp-content/debug.log dosyasına yazdırabilir ve süreci takip edebilirsiniz.

Sorumluluk Reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Canlı sitenizde denemeden önce mutlaka tam bir veritabanı ve dosya yedeği alın. Yanlış yapılandırılmış filtreler, içeriklerin görünmemesine veya sitenin çökmesine neden olabilir.

İleri Seviye Filtreleme: Custom Fields ve Koşullu Mantık Entegrasyonu

Dinamik içerik filtrelerini bir üst seviyeye taşımak için WordPress'in Custom Fields (Özel Alanlar) yapısını kullanmak oldukça verimlidir. Örneğin, her yazının altına o yazara özel bir "Yazar Notu" veya "İnceleme Puanı" eklemek istediğinizi düşünün. Bu verileri veritabanından çekerek filtre içerisine dinamik olarak enjekte edebiliriz.

Aşağıdaki örnek, yazar_notu adında bir özel alan tanımlıysa bunu içeriğin sonuna otomatik olarak ekleyen profesyonel bir yaklaşımı göstermektedir:

add_filter('the_content', 'ozel_yazar_notu_ekle');

function ozel_yazar_notu_ekle($content) {
    if (is_single() && in_the_loop() && is_main_query()) {
        $yazar_notu = get_post_meta(get_the_ID(), 'yazar_notu', true);
        
        if (!empty($yazar_notu)) {
            $ek_icerik = '
'; $ek_icerik .= 'Editörün Notu: ' . esc_html($yazar_notu); $ek_icerik .= '
'; return $content . $ek_icerik; } } return $content; }

Filtreleme Süreçlerinde Performans Optimizasyonu

the_content filtresi, sayfa her yüklendiğinde tetiklendiği için içerisine eklediğiniz işlemlerin maliyeti doğrudan sayfa yüklenme süresini (TTFB) etkiler. Özellikle veritabanı sorguları veya dış API istekleri yapıyorsanız, performans kaybını önlemek için WordPress Transient API kullanmanız önerilir.

Performans İçin İpuçları:

  • Sorguları Önbelleğe Alın: Eğer filtre içerisinde karmaşık bir veritabanı sorgusu yapıyorsanız, sonucu set_transient() ile belirli bir süre saklayın.
  • Koşullu Kontrolleri Erken Yapın: is_admin() veya is_feed() gibi kontrolleri fonksiyonun en başında yaparak, gereksiz işlemlerin çalışmasını engelleyin.
  • DOM Manipülasyonundan Kaçının: Çok büyük içeriklerde DOMDocument sınıfını kullanmak bellek tüketimini artırabilir; mümkünse string fonksiyonlarını (str_replace vb.) tercih edin.

Aşağıdaki kod bloğu, veritabanı sorgusunu önbelleğe alarak filtre performansını nasıl artıracağınızı gösterir:

function performansli_icerik_filtresi($content) {
    if (!is_single()) return $content;

    $transient_key = 'ozel_icerik_' . get_the_ID();
    $cached_data = get_transient($transient_key);

    if (false === $cached_data) {
        // Ağır bir işlem simülasyonu
        $cached_data = "
Dinamik Veri
"; set_transient($transient_key, $cached_data, 12 * HOUR_IN_SECONDS); } return $content . $cached_data; } add_filter('the_content', 'performansli_icerik_filtresi');

Deployment ve Yayına Alma Stratejileri

Geliştirdiğiniz filtreleri canlı ortama alırken sadece kodun çalışması yeterli değildir; kodun sürdürülebilir olması gerekir. Filtrelerinizi mutlaka bir Must-Use (MU) Plugin veya özel bir eklenti içerisinde tutun. Temanızın functions.php dosyasına yazılan kodlar, tema değişikliğinde kaybolacağı için profesyonel projelerde bu yöntem tercih edilmez.

Profesyonel İpucu: Filtrelerinizi geliştirirken WP_DEBUG modunu aktif tutun. Filtre fonksiyonlarınızda oluşabilecek PHP hataları, sitenizin beyaz ekran (White Screen of Death) vermesine neden olabilir. Hata ayıklama sürecinde error_log() fonksiyonunu kullanarak değişkenlerin durumunu sunucu loglarına yazdırabilirsiniz.

Sonuç

WordPress ile özel bir dinamik içerik yazdırma filtresi yapmak, sitenizin işlevselliğini kod düzeyinde kontrol etmenizi sağlar. the_content filtresini kullanarak içeriklerinize dinamiklik katabilir, reklamlar ekleyebilir veya kullanıcı deneyimini optimize edebilirsiniz. Bir sonraki adım olarak, bu filtreleri get_post_meta() fonksiyonu ile birleştirerek, her yazı için özel olarak tanımlanmış alanları (Custom Fields) içeriğe otomatik olarak dahil etmeyi deneyebilirsiniz. Profesyonel WordPress geliştirme sürecinde filtreler, sitenizi standart bir tema olmaktan çıkarıp özelleştirilmiş bir uygulamaya dönüştüren en güçlü araçlardır.

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

Teknoloji ve yazılım kullanımı üzerine pratik kılavuzlar hazırlıyorum. Karmaşık dijital araçları, herkesin hızlıca öğrenebileceği sade rehberler haline getirmekte uzmanım.

Yorumlar (0)

Yorum Yaz