Gereksinimler ve Ön Hazırlık
Başarılı bir öneri algoritması geliştirmek için WordPress'in güncel bir sürümüne (6.x veya üzeri) ve PHP 8.2+ çalışma ortamına ihtiyacınız vardır. Ayrıca, veritabanı sorgularını doğrudan yönetmek yerine WordPress'in WP_Query sınıfını kullanmak, hem güvenlik hem de performans açısından kritik öneme sahiptir.
- PHP Sürümü: 8.2 veya üzeri (Performans ve güvenlik iyileştirmeleri için).
- Veritabanı: MySQL 8.0+ veya MariaDB 10.6+.
- Geliştirme Ortamı: Hata ayıklama modunun (WP_DEBUG) aktif olduğu yerel bir kurulum (LocalWP veya XAMPP).
- Bilgi Seviyesi: WordPress Template Hierarchy (Şablon Hiyerarşisi) ve Custom Post Types (Özel İçerik Türleri) hakkında temel bilgi.
Adım 1: Kullanıcı Tercihlerini Belirleme ve Veri Toplama
Dinamik öneri algoritmasının temeli, kullanıcının neyi sevdiğini anlamaktır. En basit ve etkili yöntem, kullanıcının o an okuduğu yazının "kategori" veya "etiket" verilerini referans almaktır. Aşağıdaki kod, mevcut yazının kategorilerini çeker ve bunları bir dizi (array) olarak hazırlar.
function get_current_post_categories() {
global $post;
$categories = wp_get_post_categories($post->ID, array('fields' => 'ids'));
return $categories;
}
Bu fonksiyon, mevcut yazının ID'sini kullanarak tüm kategori kimliklerini döndürür. Bu veriyi, bir sonraki adımda sorgumuzu filtrelemek için kullanacağız.
Adım 2: WP_Query ile Özel Öneri Sorgusu Oluşturma
Kullanıcının ilgi alanlarını belirledikten sonra, veritabanından benzer içerikleri çekmemiz gerekir. Burada WP_Query kullanarak, mevcut yazıyı hariç tutan ve aynı kategorideki yazıları getiren bir sorgu oluşturuyoruz.
function get_related_posts_by_category($post_id, $categories) {
$args = array(
'category__in' => $categories,
'post__not_in' => array($post_id),
'posts_per_page' => 3,
'orderby' => 'rand', // Rastgelelik ekleyerek kullanıcıyı şaşırtın
'post_status' => 'publish'
);
return new WP_Query($args);
}
Bu sorgu, category__in parametresi ile belirtilen kategorilerdeki içerikleri filtreler ve post__not_in ile o an okunan yazıyı öneri listesinden çıkarır.
Adım 3: Algoritmayı Performans İçin Optimize Etme (Transients API)
Karmaşık sorgular veritabanını yorabilir. Öneri algoritmanızın her sayfa yüklenişinde veritabanına yük bindirmemesi için WordPress Transients API kullanarak sonuçları önbelleğe almalıyız. Bu yöntem, sorgu sonucunu belirli bir süre (örneğin 12 saat) hafızada tutar.
function get_cached_recommendations($post_id) {
$transient_key = 'related_posts_' . $post_id;
$recommendations = get_transient($transient_key);
if (false === $recommendations) {
$categories = get_current_post_categories();
$recommendations = get_related_posts_by_category($post_id, $categories);
set_transient($transient_key, $recommendations, 12 * HOUR_IN_SECONDS);
}
return $recommendations;
}
Bu kod bloğu, veritabanı sorgusunu sadece ilk seferde çalıştırır ve sonraki ziyaretlerde önbellekten okuma yaparak sitenizin hızını korur.
Adım 4: Önerileri Şablona Entegre Etme
Şimdi hazırladığımız algoritmayı single.php dosyanızda veya tema fonksiyonlarınızda kullanma vakti. Aşağıdaki örnek, önerilen yazıları bir liste halinde ekrana basar.
function display_recommendations_html() {
global $post;
$query = get_cached_recommendations($post->ID);
if ($query->have_posts()) {
echo '';
echo 'Sizin İçin Seçtiklerimiz
';
while ($query->have_posts()) {
$query->the_post();
echo '- ' . get_the_title() . '
';
}
echo '
';
wp_reset_postdata();
}
}
Bu fonksiyon, önerilen içerikleri HTML formatında sunar. wp_reset_postdata() kullanımı, global $post değişkeninin bozulmaması için hayati öneme sahiptir.
Adım 5: Algoritma Yöntemlerinin Karşılaştırması
Öneri motorları oluştururken farklı yaklaşımlar mevcuttur. İhtiyacınıza göre en uygun yöntemi seçmek için aşağıdaki tabloyu inceleyebilirsiniz.
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| Kategori Bazlı | Hızlı ve kolay uygulanır. | Genel sonuçlar verir. |
| Etiket (Tag) Bazlı | Daha spesifik içerik sunar. | Etiket yönetimi disiplin gerektirir. |
| Ziyaretçi Geçmişi (Cookie) | Kişiselleştirme düzeyi yüksektir. | GDPR/KVKK uyumu karmaşıktır. |
Kritik Güvenlik Uyarısı: Veritabanı sorgularında asla doğrudan kullanıcı girdilerini (GET/POST) kullanmayın.
WP_Querysınıfı, SQL injection saldırılarına karşı güvenli bir yapı sunar. Ancak, özel sorgular yazarken$wpdb->prepare()metodundan şaşmayın. Üretim ortamında (production) her zaman hata ayıklama modunu kapatın.
Sıkça Sorulan Sorular
Öneri algoritması sitemi yavaşlatır mı?
Eğer sorguları Transients API ile önbelleğe alırsanız, performans kaybı neredeyse sıfıra iner. Önbellekleme, veritabanı yükünü minimize eder.
Neden eklenti kullanmak yerine kod yazmalıyım?
Eklentiler genellikle gereksiz CSS/JS yükü getirir. Kendi algoritmanızı yazmak, sitenizin kaynak tüketimini kontrol altında tutmanızı sağlar ve tam özelleştirme imkanı sunar.
Önerilerde görsel göstermek için ne yapmalıyım?
get_the_post_thumbnail() fonksiyonunu kullanarak display_recommendations_html fonksiyonu içerisine görsel desteği ekleyebilirsiniz.
Kullanıcı girişi yapmamış ziyaretçiler için algoritma çalışır mı?
Evet, bu yöntem kullanıcının giriş yapıp yapmadığına bakmaz; sadece o anki sayfa içeriğini temel aldığı için tüm ziyaretçiler için kusursuz çalışır.
Algoritmayı nasıl test edebilirim?
Sitenizdeki farklı kategorilere ait yazıları ziyaret ederek, önerilen içeriklerin doğru kategoriden gelip gelmediğini gözlemleyebilir ve Query Monitor eklentisi ile sorgu sürelerini analiz edebilirsiniz.
İleri Düzey İpucu: Öneri Algoritmasını Kişiselleştirme ve A/B Testi
Algoritmanızın başarısını ölçmek ve kullanıcı etkileşimini artırmak için basit bir A/B testi mekanizması kurabilirsiniz. Rastgele bir değer atayarak, ziyaretçilerin bir kısmına "popüler içerikleri", diğer kısmına ise "kategori tabanlı önerileri" göstererek hangisinin daha fazla tıklama aldığını analiz edebilirsiniz.
function get_dynamic_recommendation_strategy() {
// Rastgele bir strateji seç (0 veya 1)
$strategy = rand(0, 1);
if ($strategy === 0) {
return 'popular';
}
return 'category_based';
}
// Kullanım örneği
$strategy = get_dynamic_recommendation_strategy();
$args = ($strategy === 'popular') ? $popular_args : $category_args;
$query = new WP_Query($args);
Hata Ayıklama ve İzleme Süreçleri
Öneri algoritmanızın arka planda nasıl çalıştığını anlamak, özellikle veritabanı yükünü minimize etmek için kritiktir. Geliştirme aşamasında sorgu hatalarını yakalamak ve önerilerin boş dönmesi durumunda yedek bir içerik havuzu (fallback) sunmak, kullanıcı deneyimini kesintisiz kılar.
Boş Sonuçlar İçin Yedekleme (Fallback) Mekanizması
Eğer kullanıcının okuma geçmişine veya kategori tercihine uygun yeterli içerik bulunamazsa, sistemin boş bir alan göstermesi yerine sitenizin "En Çok Okunanlar" listesini otomatik olarak devreye sokması gerekir.
$query = new WP_Query($args);
if (!$query->have_posts()) {
// Eğer özel öneri yoksa, genel popüler içerikleri getir
$args = array(
'posts_per_page' => 3,
'orderby' => 'comment_count',
'order' => 'DESC'
);
$query = new WP_Query($args);
}
Veritabanı Yükünü İzleme
Öneri algoritmanızın veritabanı üzerindeki etkisini izlemek için SAVEQUERIES sabitini kullanabilirsiniz. wp-config.php dosyanıza ekleyeceğiniz define('SAVEQUERIES', true); satırı ile tüm sorguları $wpdb->queries dizisinde görebilirsiniz. Ancak bu işlemi yalnızca geliştirme ortamında yapmalı, canlı sitede performans kaybına yol açmamak için mutlaka kapatmalısınız.
| Metrik | Hedef Değer | İzleme Aracı |
|---|---|---|
| Sorgu Süresi | < 0.05s | Query Monitor |
| Önbellek İsabet Oranı | > %90 | Transients API Log |
| Hata Oranı | %0 | WP_DEBUG_LOG |
Bu teknik yaklaşımlar, algoritmanızın sadece çalışmasını sağlamakla kalmaz, aynı zamanda yüksek trafikli sitelerde bile ölçeklenebilir ve sürdürülebilir bir yapı sunar. Kodunuzu modüler tutarak, ileride dış servislerden (Elasticsearch veya harici API'ler) veri çekmek istediğinizde kolayca entegrasyon yapabilirsiniz.
Sonuç
WordPress ile özel bir dinamik içerik önerisi algoritması oluşturmak, sitenizi standart bir blogdan akıllı bir içerik platformuna dönüştürür. Bu rehberde öğrendiğiniz WP_Query yapılandırması, önbellekleme teknikleri ve döngü yönetimi, profesyonel WordPress geliştiriciliğinin temel taşlarıdır. Bir sonraki adım olarak, bu önerileri "Kullanıcı Etiketleri" veya "Okuma Geçmişi" (Cookie tabanlı) ile birleştirerek çok daha gelişmiş bir yapay zeka destekli öneri motoruna doğru ilerleyebilirsiniz.


Yorumlar (0)
Yorum Yaz