Wordpress İle Özel Bir Kullanıcı Etkinlik Hatırlatma Modülü Nasıl Yapılır?

Wordpress İle Özel Bir Kullanıcı Etkinlik Hatırlatma Modülü Nasıl Yapılır?
Wordpress İle Özel Bir Kullanıcı Etkinlik Hatırlatma Modülü Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu modülü geliştirmeye başlamadan önce WordPress altyapınızın güncel olduğundan emin olmalısınız. 2026 standartlarına uygun olarak PHP 8.2 veya üzeri sürümlerin kullanılması önerilir. Geliştirme ortamınızda hata ayıklama (debug) modunun açık olması, olası sorunları anında tespit etmenize yardımcı olacaktır.

  • WordPress 6.5 veya üzeri bir sürüm.
  • Temel düzeyde PHP ve SQL bilgisi.
  • FTP veya dosya yöneticisi erişimi (özel bir eklenti dosyası oluşturmak için).
  • WP-Cron sisteminin sunucunuzda aktif ve çalışır durumda olması.

Adım 1: Özel Veritabanı Tablosu Oluşturma

Kullanıcı etkinliklerini verimli bir şekilde izlemek için WordPress'in standart wp_usermeta tablosunu şişirmek yerine, özel bir tablo kullanmak performans açısından çok daha sağlıklıdır. Aşağıdaki kod, eklentiniz aktif edildiğinde etkinlik kayıtlarını tutacak tabloyu oluşturur.


function etkinlik_hatirlatma_tablosunu_olustur() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'kullanici_etkinlikleri';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        user_id bigint(20) NOT NULL,
        etkinlik_turu varchar(50) NOT NULL,
        kayit_tarihi datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'etkinlik_hatirlatma_tablosunu_olustur');

Bu kod bloğunda dbDelta fonksiyonu kullanılarak tablonun varlığı kontrol edilir ve gerekirse oluşturulur. Bu yöntem, veritabanı güncellemelerini güvenle yönetmenizi sağlar.

Adım 2: Kullanıcı Etkinliklerini Kaydetme

Sistemin hatırlatma yapabilmesi için önce etkinlikleri yakalamamız gerekir. Örneğin, kullanıcının siteye giriş yaptığı anı kaydedelim. WordPress'in wp_login kancasını kullanarak bu veriyi veritabanına işleyebiliriz.


add_action('wp_login', 'etkinlik_kaydet_giris', 10, 2);
function etkinlik_kaydet_giris($user_login, $user) {
    global $wpdb;
    $wpdb->insert(
        $wpdb->prefix . 'kullanici_etkinlikleri',
        array(
            'user_id' => $user->ID,
            'etkinlik_turu' => 'giris',
            'kayit_tarihi' => current_time('mysql')
        ),
        array('%d', '%s', '%s')
    );
}

Burada $wpdb->insert kullanarak SQL injection riskini minimize eden güvenli bir veri girişi gerçekleştiriyoruz. Veri tipi belirleyicileri (%d, %s) sayesinde veritabanı güvenliğini sağlıyoruz.

Adım 3: WP-Cron İle Hatırlatma Zamanlayıcı Oluşturma

Hatırlatmaların otomatik gönderilmesi için WordPress'in zamanlanmış görev sistemi olan WP-Cron'u kullanmalıyız. Her gün belirli bir saatte çalışacak bir görev tanımlayalım.


if (!wp_next_scheduled('gunluk_hatirlatma_gorevi')) {
    wp_schedule_event(time(), 'daily', 'gunluk_hatirlatma_gorevi');
}

add_action('gunluk_hatirlatma_gorevi', 'hatirlatma_kontrol_ve_gonder');
function hatirlatma_kontrol_ve_gonder() {
    // Burada son 7 gün içinde giriş yapmayan kullanıcıları sorgulayacağız.
    // Sorgu mantığı ve e-posta gönderim fonksiyonları buraya gelecek.
}

WP-Cron, sunucu üzerindeki yükü dengelemek için idealdir. Ancak çok yoğun trafikli sitelerde gerçek bir sunucu cron job'u (crontab) kullanılması daha performanslıdır.

Adım 4: Hatırlatma Mantığını ve E-posta Gönderimini Kodlama

Şimdi sistemin kalbini oluşturalım. Veritabanından verileri çekip, şartları sağlayan kullanıcılara e-posta gönderen fonksiyonu yazalım.


function hatirlatma_kontrol_ve_gonder() {
    global $wpdb;
    $yedi_gun_once = date('Y-m-d H:i:s', strtotime('-7 days'));
    
    $kullanicilar = $wpdb->get_results("SELECT user_id FROM {$wpdb->prefix}kullanici_etkinlikleri WHERE kayit_tarihi < '$yedi_gun_once' GROUP BY user_id");

    foreach ($kullanicilar as $k) {
        $user_info = get_userdata($k->user_id);
        $to = $user_info->user_email;
        $subject = 'Sizi Özledik!';
        $message = 'Merhaba, uzun süredir sitemize giriş yapmadınız. Sizi tekrar aramızda görmekten mutluluk duyarız.';
        wp_mail($to, $subject, $message);
    }
}

wp_mail fonksiyonu, WordPress'in standart e-posta gönderim aracıdır. Büyük ölçekli gönderimlerde e-postaların spam'e düşmemesi için SMTP yapılandırması kullanmanız kritik öneme sahiptir.

Etkinlik Takip Yöntemlerinin Karşılaştırılması

Yöntem Avantajı Dezavantajı
Özel Tablo Yüksek performans, düzenli veri. Ekstra veritabanı yükü.
User Meta Hızlı kurulum, kolay erişim. Büyük veride yavaşlama.
Harici Servis Profesyonel analiz sunar. Maliyetli ve bağımlılık yaratır.

Güvenlik ve Performans Uyarıları

Kritik Güvenlik Uyarısı: Veritabanı sorgularınızda her zaman $wpdb->prepare() kullanın. Kullanıcı girdilerini doğrudan SQL sorgularına dahil etmek, sitenizi SQL injection saldırılarına karşı savunmasız bırakır. Ayrıca, e-posta gönderimlerinde kullanıcı verilerini filtrelemeyi ve doğrulamayı unutmayın.

Sıkça Sorulan Sorular

WP-Cron neden çalışmıyor olabilir?

WP-Cron, sitenize ziyaretçi geldiğinde tetiklenir. Eğer sitenizde trafik azsa görevler zamanında çalışmayabilir. Bu durumda sunucu panelinizden gerçek bir cron job tanımlamanız gerekir.

Hatırlatma e-postaları neden spam klasörüne düşüyor?

Sunucunuzun PHP mail() fonksiyonu yerine bir SMTP eklentisi kullanarak gönderim yapın. SPF, DKIM ve DMARC kayıtlarınızın doğru yapılandırıldığından emin olun.

Veritabanı tablosunu nasıl temizlerim?

Eklenti silindiğinde veya belirli aralıklarla eski verileri silmek için DELETE FROM sorgusu ile kayit_tarihi üzerinden temizlik yapabilirsiniz.

Bu modül çok fazla kullanıcıda yavaşlar mı?

Sorgularınızda indeksleme (index) kullanırsanız yavaşlama olmaz. kayit_tarihi sütununa indeks ekleyerek sorgu hızını optimize edebilirsiniz.

Özel etkinlikleri nasıl eklerim?

Kendi kancalarınızı (hook) tanımlayarak do_action('ozel_etkinlik_gerceklesti') şeklinde tetiklemeler oluşturabilir ve bunları kaydedebilirsiniz.

Gelişmiş Hata Ayıklama ve Loglama Stratejileri

Sistemin arka planda sessizce çalışması, bazen hataların gözden kaçmasına neden olabilir. Özellikle wp-cron görevleri başarısız olduğunda, sorunun kaynağını bulmak için özel bir loglama mekanizması kurmak hayati önem taşır. WordPress'in yerleşik WP_DEBUG_LOG özelliğini kullanarak, hatırlatma tetikleyicilerinizin çıktılarını izleyebilirsiniz.

Aşağıdaki yardımcı fonksiyon, etkinlik hatırlatma sürecinde oluşan hataları wp-content/debug.log dosyasına yazmanızı sağlar:

function custom_reminder_log($message) {
    if (WP_DEBUG === true) {
        $timestamp = date('Y-m-d H:i:s');
        error_log("[Etkinlik Hatırlatıcı - $timestamp]: " . $message);
    }
}

// Kullanım örneği:
if (!$email_sent) {
    custom_reminder_log("E-posta gönderimi başarısız oldu. Kullanıcı ID: " . $user_id);
}

Bu yöntemle, veritabanı sorgularınızın dönüp dönmediğini veya e-posta fonksiyonunun (wp_mail) hangi aşamada hata verdiğini anlık olarak takip edebilirsiniz. Geliştirme aşamasında Query Monitor eklentisini kurarak, veritabanı sorgularınızın performansını ve olası yavaşlamaları da analiz etmeniz önerilir.

Ölçeklenebilirlik İçin İleri İpuçları

Kullanıcı sayınız arttıkça, wp-cron görevleri sitenizin genel sayfa yüklenme sürelerini etkileyebilir. Binlerce kullanıcıya aynı anda e-posta göndermek, sunucu kaynaklarını tüketebilir. Bu tür darboğazları aşmak için aşağıdaki stratejileri uygulayabilirsiniz:

  • Toplu İşleme (Chunking): E-postaları tek bir döngüde göndermek yerine, OFFSET ve LIMIT kullanarak 50'şerli gruplar halinde gönderin.
  • Action Scheduler Kullanımı: WooCommerce tarafından da kullanılan Action Scheduler kütüphanesini entegre ederek, zamanlanmış görevlerinizi daha güvenilir ve ölçeklenebilir bir kuyruk yapısına taşıyın.
  • Harici SMTP Servisleri: WordPress'in varsayılan mail() fonksiyonu yerine SendGrid, Mailgun veya Amazon SES gibi profesyonel servisleri kullanarak gönderim hızınızı ve teslimat oranınızı artırın.

Özellikle yüksek trafikli sitelerde, hatırlatma görevlerini sunucunun kendi crontab yapısına devretmek en sağlıklı yöntemdir. Bunun için wp-config.php dosyanıza şu satırı ekleyerek WordPress'in kendi cron sistemini devre dışı bırakabilir ve sunucu seviyesinde bir cron job oluşturabilirsiniz:

define('DISABLE_WP_CRON', true);

Ardından sunucunuzun terminaline şu komutu ekleyerek her 15 dakikada bir tetiklenmesini sağlayabilirsiniz:

*/15 * * * * /usr/local/bin/php /home/kullanici/public_html/wp-cron.php > /dev/null 2>&1

Bu yapılandırma, sitenize giren ziyaretçi sayısından bağımsız olarak hatırlatma mekanizmanızın düzenli çalışmasını garanti altına alır.

Sonuç

WordPress ile özel bir kullanıcı etkinlik hatırlatma modülü oluşturmak, sitenizin kullanıcı etkileşimini artırmak için atabileceğiniz en stratejik adımlardan biridir. Bu rehberde öğrendiğiniz veritabanı yönetimi, zamanlanmış görevler ve e-posta gönderim teknikleri, WordPress geliştirme yetkinliğinizi bir üst seviyeye taşıyacaktır. Bir sonraki adım olarak, bu sisteme bir "Ayarlar" sayfası ekleyerek hatırlatma sürelerini yönetici panelinden yönetilebilir hale getirmeyi deneyebilirsiniz.

Yasal Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamında kullanmadan önce mutlaka yedek almalı ve güvenlik testlerinden geçirmelisiniz. Yazılım geliştirme süreçlerinde oluşabilecek veri kayıplarından veya sunucu hatalarından geliştirici sorumludur.

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

Mutfağından bahçesine, yaşamın her alanında hızlı ve etkili çözüm rehberleri hazırlıyorum. Bilgi kirliliğinden uzak, doğrudan sonuca odaklanan içerikler üretiyorum.

Yorumlar (0)

Yorum Yaz