Wordpress İle Özel Bir Dinamik İçerik Özetleme Sistemi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu projeyi hayata geçirmek için temel düzeyde PHP bilgisine ve WordPress dosya yapısına hakim olmanız beklenmektedir. Çalışmaya başlamadan önce aşağıdaki araçların hazır olduğundan emin olun:

  • WordPress 6.5 veya üzeri bir sürüm (2026 standartları gereği güncel PHP 8.2+ ortamı önerilir).
  • Temanızın functions.php dosyasına erişim veya özel bir eklenti oluşturma yetkisi.
  • Kodları test edebileceğiniz bir yerel geliştirme ortamı (LocalWP veya benzeri).
  • Veritabanı yedeği (Herhangi bir hata durumuna karşı önlem olarak).
Kritik Uyarı: Canlı bir web sitesinde kod değişikliği yapmadan önce mutlaka veritabanı ve dosya yedeği alın. Hatalı bir PHP kodu, sitenizin "Beyaz Ekran" hatası vermesine neden olabilir.

Adım 1: İçerik Özetleme Fonksiyonunu Tanımlama

İlk adımda, WordPress'in standart wp_trim_words fonksiyonunu temel alarak, içerik uzunluğunu dinamik olarak belirleyen ve HTML etiketlerini temizleyen bir yardımcı fonksiyon oluşturacağız. Bu fonksiyon, içeriğinizi belirlediğiniz kelime sayısına göre kırpar.

function ozel_dinamik_ozet($icerik, $kelime_sayisi = 55) {
    // HTML etiketlerini temizle
    $temiz_icerik = strip_tags($icerik);
    
    // Kelimeleri sınırla
    return wp_trim_words($temiz_icerik, $kelime_sayisi, '...');
}

Bu kod bloğu, strip_tags fonksiyonu ile metin içerisindeki görselleri ve linkleri temizleyerek sadece saf metni alır. Ardından wp_trim_words ile içeriği güvenli bir şekilde keser.

Adım 2: Dinamik Özetleme İçin Filtre Kancası (Hook) Kullanımı

WordPress'te the_excerpt filtresini kullanarak özetleme sistemini tüm sitenize entegre edebilirsiniz. Bu yöntem, temanızın her yerinde özetlerin otomatik olarak sizin kurallarınıza göre şekillenmesini sağlar.

add_filter('the_excerpt', 'ozel_ozet_filtresi');

function ozel_ozet_filtresi($excerpt) {
    global $post;
    // Eğer içerik boşsa, post_content'ten özet üret
    if (empty($excerpt)) {
        return ozel_dinamik_ozet($post->post_content, 40);
    }
    return $excerpt;
}

Bu işlem, eğer bir yazı için manuel özet girilmemişse, sistemin otomatik olarak içeriğin ilk 40 kelimesini alıp özet olarak sunmasını sağlar. Bu, içerik yönetimini büyük ölçüde kolaylaştırır.

Adım 3: Kısa Kod (Shortcode) ile Esnek Özetleme

Bazen bir yazının içinde veya sayfa tasarımında özel bir yerde özet göstermek isteyebilirsiniz. Bunun için bir kısa kod oluşturmak en profesyonel yaklaşımdır.

add_shortcode('ozet_goster', 'ozet_kisa_kod_fonksiyonu');

function ozet_kisa_kod_fonksiyonu($atts) {
    $a = shortcode_atts(array(
        'id' => get_the_ID(),
        'uzunluk' => 20
    ), $atts);

    $yazi = get_post($a['id']);
    return ozel_dinamik_ozet($yazi->post_content, $a['uzunluk']);
}

Bu kısa kodu [ozet_goster id="123" uzunluk="30"] şeklinde kullanarak, istediğiniz yazının özetini herhangi bir sayfaya dinamik olarak çekebilirsiniz.

Adım 4: Güvenlik ve Performans Optimizasyonu

Dinamik içerik üretirken SQL sorgularını optimize etmek ve XSS (Cross-Site Scripting) saldırılarını engellemek zorunludur. WordPress'in sunduğu veri temizleme fonksiyonlarını her zaman kullanmalısınız.

// Veri temizleme örneği
function guvenli_ozet_cikti($metin) {
    // Çıktıyı sanitize et
    return esc_html($metin);
}

esc_html veya esc_attr kullanımı, veritabanından gelen verilerin tarayıcıda doğrudan çalıştırılabilir kod olarak yorumlanmasını engeller. Özellikle kullanıcı girdilerinin olduğu alanlarda bu güvenlik katmanı hayati önem taşır.

Adım 5: Karşılaştırma Tablosu: Özetleme Yöntemleri

Aşağıdaki tablo, WordPress'te özetleme yaparken kullanabileceğiniz farklı yöntemlerin avantaj ve dezavantajlarını göstermektedir.

Yöntem Avantajı Dezavantajı
Manuel Özet Tam kontrol sağlar. Zaman alıcıdır.
Dinamik PHP (Rehberdeki) Otomatiktir, hızlıdır. HTML yapısını kaybedebilir.
Eklenti Kullanımı Kurulumu kolaydır. Siteyi yavaşlatabilir.

Adım 6: Hata Ayıklama ve Test Süreci

Sistemin düzgün çalışıp çalışmadığını test etmek için WP_DEBUG modunu aktif etmelisiniz. wp-config.php dosyanızda define('WP_DEBUG', true); satırını ekleyerek olası PHP hatalarını anlık görebilirsiniz.

// Debugging için basit loglama
if (defined('WP_DEBUG') && WP_DEBUG) {
    error_log('Özet oluşturuldu: ' . get_the_ID());
}

Bu kod, özet oluşturma sürecini sunucu loglarına kaydeder. Eğer özetler beklediğiniz gibi görünmüyorsa, bu logları inceleyerek hangi yazının hata verdiğini kolayca tespit edebilirsiniz.

Güvenlik Sorumluluk Reddi: Paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamında kullanmadan önce güvenlik açıklarını (SQL Injection, XSS) göz önünde bulundurarak verileri mutlaka filtreleyin ve esc_ fonksiyonları ile çıktıları temizleyin.

Sıkça Sorulan Sorular

Özetleme sistemi SEO'yu nasıl etkiler?

Dinamik özetleme, arama motorlarının içeriği daha hızlı taramasını sağlar ve kullanıcıların arama sonuçlarında daha alakalı metinler görmesine yardımcı olur. Bu durum tıklama oranlarını (CTR) olumlu etkiler.

Özet içine görsel ekleyebilir miyim?

Evet, strip_tags fonksiyonunu kaldırarak veya özelleştirerek HTML etiketlerine izin verebilirsiniz. Ancak güvenlik riski oluşturabileceği için sadece img etiketlerine izin veren bir filtre kullanmanız önerilir.

Bu kodlar tüm temalarla çalışır mı?

Evet, bu kodlar WordPress çekirdek yapısı ile uyumludur ve her türlü standart WordPress temasıyla sorunsuz çalışır.

Neden eklenti yerine kod kullanmalıyım?

Eklentiler sitenize ek yük getirir. Sadece küçük bir fonksiyon için eklenti kullanmak sitenizin hızını gereksiz yere düşürür; kod ile çözüm her zaman daha performanslıdır.

Özet uzunluğunu yazı tipine göre değiştirebilir miyim?

Evet, if (is_single()) veya if (is_category()) gibi koşullu etiketler kullanarak farklı sayfa türlerinde farklı kelime sayıları tanımlayabilirsiniz.

İleri Düzey Özelleştirme: Dinamik Özetleme İçin Koşullu Mantık

Sisteminizi daha esnek hale getirmek için WordPress'in sunduğu koşullu etiketleri (conditional tags) kullanarak, özetleme mantığını sayfa türüne veya kullanıcı rolüne göre özelleştirebilirsiniz. Örneğin, ana sayfada daha kısa, kategori sayfalarında ise biraz daha detaylı özetler sunmak, kullanıcıların içeriklerinize olan ilgisini artırabilir.

Aşağıdaki kod örneği, excerpt_length filtresini kullanarak farklı sayfa türlerinde dinamik olarak kelime sayısı belirlemenize olanak tanır:

function ozel_dinamik_ozet_uzunlugu( $length ) {
    if ( is_front_page() ) {
        return 20; // Ana sayfada 20 kelime
    } elseif ( is_category() ) {
        return 40; // Kategori sayfalarında 40 kelime
    } else {
        return 55; // Diğer yerlerde varsayılan 55 kelime
    }
}
add_filter( 'excerpt_length', 'ozel_dinamik_ozet_uzunlugu', 999 );

Performans İzleme ve Önbellekleme Stratejileri

Özelleştirilmiş özetleme fonksiyonları, özellikle veritabanı sorgularının yoğun olduğu büyük sitelerde ek yük oluşturabilir. Bu yükü minimize etmek için WordPress Transients API kullanarak oluşturulan özetleri belirli bir süre önbelleğe almanız önerilir. Bu sayede, her sayfa yüklenişinde içerik işleme fonksiyonu tekrar çalıştırılmaz.

Aşağıdaki yapı, özetin 12 saat boyunca önbellekte tutulmasını sağlar:

function onbellekli_ozet_al( $post_id ) {
    $transient_key = 'ozet_post_' . $post_id;
    $ozet = get_transient( $transient_key );

    if ( false === $ozet ) {
        $post = get_post( $post_id );
        $ozet = wp_trim_words( $post->post_content, 30 );
        set_transient( $transient_key, $ozet, 12 * HOUR_IN_SECONDS );
    }

    return $ozet;
}

Önbellek Temizleme (Flush) İpuçları

İçerik güncellendiğinde önbelleğin otomatik olarak temizlenmesi, kullanıcıların güncel özetleri görmesi için kritiktir. Bunun için save_post kancasını kullanabilirsiniz:

add_action( 'save_post', function( $post_id ) {
    delete_transient( 'ozet_post_' . $post_id );
});

Özelleştirilmiş Özetleme İçin İleri İpuçları

  • HTML Etiketlerini Koruma: Eğer özet içerisinde kalın (bold) veya link gibi HTML etiketlerinin kalmasını istiyorsanız, wp_trim_words yerine wp_strip_all_tags kullanmadan kendi özel regex fonksiyonunuzu yazmalısınız.
  • Okuma Süresi Hesaplama: Özetleme mantığını kullanarak, içeriğin toplam kelime sayısına göre "Tahmini Okuma Süresi"ni dinamik olarak hesaplayıp özetin altına ekleyebilirsiniz.
  • Özel Alan (Custom Field) Desteği: Eğer özetin manuel olarak girilen bir "Özet" alanından gelmesini istiyorsanız, get_post_meta() fonksiyonunu kontrol eden bir öncelik sırası oluşturun.

Sonuç

WordPress ile özel bir dinamik içerik özetleme sistemi kurmak, sitenizin içerik yönetimini standart bir yapıdan profesyonel bir seviyeye taşır. Bu rehberde öğrendiğiniz PHP fonksiyonları ve kancalar sayesinde, sitenizin her alanında özelleştirilmiş özetler sunabilir ve kullanıcı deneyimini optimize edebilirsiniz. Bir sonraki adım olarak, bu sistemi bir adım öteye taşıyıp, OpenAI API kullanarak yapay zeka destekli "akıllı özetleme" modülünü sisteminize entegre etmeyi deneyebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Mert Çelik

Kendin yap (DIY) projeleri ve ev içi bakım rehberleri üzerine içerik geliştiriyorum. Detaylı ve anlaşılır anlatım diliyle karmaşık işleri keyifli hale getiriyorum.

Yorumlar (0)

Yorum Yaz