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

Gereksinimler ve Ön Hazırlık

Bu uygulamaları gerçekleştirmek için temel düzeyde PHP bilgisine sahip olmanız ve bir WordPress kurulumuna erişiminizin olması gerekir. Çalışmalarınızı doğrudan canlı bir sitede yapmak yerine, yerel bir geliştirme ortamında (LocalWP, XAMPP veya Docker gibi) denemeniz önerilir.

  • WordPress 6.x veya üzeri bir sürüm.
  • Aktif bir tema (tercihen Child Theme kullanın).
  • FTP erişimi veya WordPress admin panelindeki "Tema Dosya Düzenleyici" erişimi.
  • Kodlarınızı yazmak için VS Code gibi gelişmiş bir metin editörü.

Kodlarınızı her zaman temanızın functions.php dosyasına veya özel olarak oluşturduğunuz bir "Site-Specific Plugin" içerisine eklemelisiniz. Doğrudan ana tema dosyalarına müdahale etmek, tema güncellemelerinde kodlarınızın silinmesine neden olur.

WordPress Filtreleme Mantığı: Hook Yapısı

WordPress, "Hook" (kanca) adı verilen bir sistemle çalışır. Filtreler (Filters), veriyi alıp değiştirip geri döndürmemize yarayan kancalardır. the_content filtresi, yazı içeriği veritabanından çekilip tarayıcıya gönderilmeden hemen önce tetiklenir.

Aşağıdaki temel örnek, içeriklerin başına otomatik bir metin eklemenin en basit yolunu gösterir:

function ozel_icerik_filtresi($content) {
    if (is_single()) {
        $ozel_metin = '

Bu içerik 2026 güncellemeleriyle düzenlenmiştir.

'; return $ozel_metin . $content; } return $content; } add_filter('the_content', 'ozel_icerik_filtresi');

Bu kodda is_single() koşulu kullanılarak filtrenin sadece tekil yazı sayfalarında çalışması sağlanmıştır. add_filter fonksiyonu ile WordPress'in kendi içeriğini bizim fonksiyonumuza yönlendirdik.

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

Dinamik içerik yazdırma filtresi oluştururken, sadece metin değil, veritabanından gelen özel alanları (Custom Fields) da kullanabilirsiniz. Örneğin, bir yazarın uzmanlık alanını içeriğin sonuna otomatik eklemek için şu yöntemi izleyin:

function yazar_uzmanlik_filtresi($content) {
    if (is_single() && in_the_loop() && is_main_query()) {
        $uzmanlik = get_post_meta(get_the_ID(), 'yazar_uzmanlik', true);
        if ($uzmanlik) {
            $content .= '
Uzmanlık Alanı: ' . esc_html($uzmanlik) . '
'; } } return $content; } add_filter('the_content', 'yazar_uzmanlik_filtresi');

Burada esc_html() fonksiyonunu kullandık. Bu, veritabanından gelen verinin XSS (Cross-Site Scripting) saldırılarına karşı temizlenmesini sağlar. Kullanıcıdan gelen veya veritabanında saklanan her türlü veriyi ekrana basmadan önce mutlaka temizlemelisiniz.

Performans ve Güvenlik Karşılaştırması

Filtreleme yöntemleri arasında seçim yaparken performans ve güvenlik dengesini gözetmelisiniz. Aşağıdaki tablo, yaygın yöntemlerin karşılaştırmasını sunar:

Yöntem Avantaj Dezavantaj
the_content Filtresi Çok esnek, her yerde çalışır. Çok karmaşık kodlarda yavaşlatabilir.
Shortcode Kullanıcı kontrolünde içerik. Editörde manuel ekleme gerektirir.
Gutenberg Blokları Görsel ve modern yapı. React/JS bilgisi gerektirir.
Kritik Güvenlik Uyarısı: İçerik filtreleri yazarken eval() fonksiyonunu asla kullanmayın. Ayrıca, veritabanından veri çekerken $wpdb kullanıyorsanız SQL Injection riskine karşı $wpdb->prepare() metodunu kullanmayı ihmal etmeyin.

Gelişmiş Filtreleme: Belirli Kelimeleri Otomatik Linkleme

Dinamik içerik yazdırmanın bir diğer popüler yolu, içerik içindeki anahtar kelimeleri otomatik olarak ilgili sayfalara linklemektir. Bu, SEO performansınızı artırabilir ancak aşırı kullanımı kullanıcı deneyimini düşürebilir.

function anahtar_kelime_linkleme($content) {
    $kelime = 'WordPress';
    $link = 'WordPress';
    
    // Sadece ilk 3 eşleşmeyi değiştirir
    return preg_replace('/' . $kelime . '/i', $link, $content, 3);
}
add_filter('the_content', 'anahtar_kelime_linkleme');

preg_replace fonksiyonu ile içerik taranır ve belirtilen kelime link ile değiştirilir. /i bayrağı, kelimenin büyük/küçük harf duyarlılığı olmadan eşleşmesini sağlar.

Hata Ayıklama (Debugging) İpuçları

Filtreleriniz çalışmadığında veya sitenizde beyaz ekran (White Screen of Death) oluştuğunda şu adımları izleyin:

  1. wp-config.php dosyasında define('WP_DEBUG', true); ayarını aktif edin.
  2. Hata loglarını wp-content/debug.log dosyasından takip edin.
  3. Filtrenin önceliğini kontrol edin: add_filter('the_content', 'fonksiyon_adi', 20); şeklinde üçüncü parametreyi artırarak diğer eklentilerden sonra çalışmasını sağlayın.
// Öncelik ayarlı filtre örneği
add_filter('the_content', 'benim_filtrem', 99);

Sıkça Sorulan Sorular

Filtreler tüm sayfalarda mı çalışır?

Varsayılan olarak the_content filtresi, içeriğin yazdırıldığı her yerde (yazılar, sayfalar, özel yazı tipleri) çalışır. Koşullu etiketler (is_page(), is_single()) kullanarak bunu kısıtlamalısınız.

Filtrelerin performansa etkisi nedir?

Çok fazla filtre kullanmak ve her filtre içinde ağır veritabanı sorguları çalıştırmak sayfa yüklenme süresini artırır. Sorguları mümkünse transient API ile önbelleğe alın.

Filtre ile görselleri değiştirebilir miyim?

Evet, ancak görseller için genellikle wp_get_attachment_image_attributes filtresi daha uygundur. İçerik filtresi ile sadece HTML etiketleri üzerinde manipülasyon yapabilirsiniz.

Kullanıcı girişi kontrol edilebilir mi?

Kesinlikle. is_user_logged_in() fonksiyonunu kullanarak içeriğin sadece üyelere özel kısımlarını dinamik olarak filtreleyebilirsiniz.

Filtreler veritabanındaki içeriği kalıcı değiştirir mi?

Hayır, filtreler sadece verinin tarayıcıya gönderilmeden önceki anlık halini değiştirir. Veritabanındaki orijinal içerik her zaman korunur.

Filtreleme İşlemlerinde İleri Seviye Optimizasyon ve Önbellekleme

WordPress filtreleri, her sayfa yüklendiğinde tetiklendiği için karmaşık işlemler (örneğin harici bir API'den veri çekmek veya ağır veritabanı sorguları yapmak) sitenizin yanıt süresini ciddi oranda artırabilir. Bu durumu engellemek için Transients API kullanarak filtre sonuçlarını önbelleğe almalısınız.

Aşağıdaki örnekte, içeriğe eklenen dinamik bir verinin her seferinde hesaplanması yerine, 12 saat boyunca önbellekte tutulması sağlanmıştır:

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

    $cache_key = 'ozel_icerik_verisi_' . get_the_ID();
    $cached_data = get_transient($cache_key);

    if (false === $cached_data) {
        // Ağır işlem burada yapılır
        $cached_data = ' [Dinamik Veri: ' . date('Y-m-d H:i:s') . ']';
        set_transient($cache_key, $cached_data, 12 * HOUR_IN_SECONDS);
    }

    return $content . $cached_data;
}
add_filter('the_content', 'dinamik_icerik_filtresi_optimize');

Filtre Çakışmalarını Önleme ve Öncelik Yönetimi

WordPress'te birden fazla eklenti veya tema dosyası aynı filtreye (örneğin the_content) müdahale edebilir. Kodunuzun beklediğiniz çıktıyı vermesi için add_filter fonksiyonunun dördüncü parametresi olan priority (öncelik) değerini doğru yönetmek kritiktir.

  • Varsayılan Öncelik: 10.
  • Düşük Öncelik (Daha geç çalışır): 20 ve üzeri değerler.
  • Yüksek Öncelik (Daha erken çalışır): 1-9 arası değerler.

Eğer filtrenizin diğer tüm işlemlerden sonra çalışmasını istiyorsanız, önceliği 99 veya daha yüksek bir değer olarak ayarlayın:

// İçerik tamamen işlendikten sonra en son müdahale eder
add_filter('the_content', 'en_son_calisacak_fonksiyon', 99, 1);

function en_son_calisacak_fonksiyon($content) {
    return $content . '';
}

Birim Testleri ile Filtrelerinizi Doğrulayın

Karmaşık filtreleme mantıkları geliştirdiğinizde, kodunuzun farklı içerik tiplerinde nasıl tepki vereceğini test etmek için WP_UnitTestCase sınıfını kullanabilirsiniz. Özellikle apply_filters fonksiyonunu kullanarak manuel tetikleme yapmak, kodunuzun sağlamlığını artırır.

Profesyonel İpucu: Filtrelerinizi yazarken her zaman is_main_query() kontrolü yaparak, filtrenin yan menülerdeki (widget) içerikleri veya arama sonuçlarını bozmadığından emin olun.
function guvenli_filtre_uygula($content) {
    // Sadece ana döngüde ve tekil sayfalarda çalıştır
    if (!is_main_query() || !is_singular('post')) {
        return $content;
    }
    
    // İşlemler...
    return $content;
}
add_filter('the_content', 'guvenli_filtre_uygula');

Sonuç

WordPress ile özel bir dinamik içerik yazdırma filtresi yapmak, sitenizi statik bir yapıdan kurtarıp yaşayan bir platforma dönüştürmenizi sağlar. Bu rehberde öğrendiğiniz add_filter mantığı, esc_html ile güvenlik önlemleri ve koşullu etiket kullanımı, profesyonel WordPress geliştiriciliğinin temel taşlarıdır. Bir sonraki adım olarak, the_excerpt filtresini inceleyerek özet içeriklerinizi nasıl özelleştirebileceğinizi keşfedebilirsiniz.

Sorumluluk Reddi: Bu makaledeki kod örnekleri eğitim amaçlıdır. Canlı sitenizde uygulamadan önce mutlaka tam bir veritabanı yedeği alın. Hatalı kodlar sitenizin erişilemez olmasına yol açabilir.
Bu yazıya tepkinizi paylaşın:
Zeynep Kaya

Adım adım rehber hazırlama ve kullanıcı deneyimi odaklı içerik mimarisi konusunda yetkinim. Okuyucuların sorunlarını hızlı çözen, net ve uygulanabilir metinler üretmeyi seviyorum.

Yorumlar (0)

Yorum Yaz