Wordpress İle Özel Bir Kullanıcı Referanslı İndirim Sistemi Nasıl Yapılır?

Wordpress İle Özel Bir Kullanıcı Referanslı İndirim Sistemi Nasıl Yapılır?
Wordpress İle Özel Bir Kullanıcı Referanslı İndirim Sistemi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu sistemi kurmadan önce WordPress altyapınızın güncel olduğundan emin olmalısınız. İşlemleri gerçekleştirmek için bir alt tema (child theme) kullanmanız veya "Code Snippets" gibi güvenli bir kod yönetim aracı tercih etmeniz önerilir. Doğrudan ana tema dosyalarını düzenlemek, güncelleme sonrası kodlarınızın kaybolmasına neden olabilir.

  • WordPress 6.5 veya üzeri bir sürüm.
  • PHP 8.2 veya üzeri bir çalışma ortamı.
  • WooCommerce eklentisinin yüklü ve aktif olması (İndirim hesaplamaları için).
  • Temel düzeyde PHP ve WordPress API bilgisi.

Adım 1: Kullanıcı Meta Verisi Olarak Referans Kodunu Tanımlama

İlk adım, her kullanıcıya özel bir referans kodu atamaktır. Kullanıcı kayıt olduğunda veya profilini güncellediğinde, bu kodu veritabanına bir "user meta" olarak kaydedeceğiz. Aşağıdaki kod, kullanıcı kaydı sırasında otomatik bir referans kodu oluşturur.


function ozel_referans_kodu_olustur($user_id) {
    // Kullanıcı adı ve ID'den benzersiz bir kod üret
    $kod = strtoupper(substr(wp_hash($user_id), 0, 8));
    update_user_meta($user_id, 'referans_kodu', $kod);
}
add_action('user_register', 'ozel_referans_kodu_olustur');

Bu kod, kullanıcı veritabanına kaydedildiği anda çalışır ve wp_hash fonksiyonunu kullanarak güvenli, tahmin edilmesi zor bir 8 karakterli kod oluşturur. Bu kod, wp_usermeta tablosunda saklanır.

Adım 2: Referans Kodunu Kullanıcı Profilinde Görüntüleme

Kullanıcıların kendi kodlarını görebilmeleri için profil sayfalarına veya "Hesabım" sayfasına bir alan eklememiz gerekir. Aşağıdaki fonksiyon, WooCommerce "Hesabım" sayfasına özel bir sekme veya bilgi alanı eklemek için kullanılabilir.


function profil_referans_kodunu_goster() {
    $user_id = get_current_user_id();
    $kod = get_user_meta($user_id, 'referans_kodu', true);
    
    if ($kod) {
        echo '
'; echo '

Referans Kodunuz: ' . esc_html($kod) . '

'; echo '
'; } } add_action('woocommerce_account_dashboard', 'profil_referans_kodunu_goster');

Burada esc_html fonksiyonunu kullanarak XSS (Cross-Site Scripting) saldırılarına karşı veriyi temizliyoruz. Kullanıcı, kendisine özel kodunu bu alanda görerek arkadaşlarıyla paylaşabilir.

Adım 3: Sepette Referans Kodu Giriş Alanı Oluşturma

Kullanıcıların referans kodunu kullanabilmeleri için ödeme veya sepet sayfasına bir giriş alanı eklemeliyiz. Bu alan, girilen kodun geçerli olup olmadığını kontrol edecektir.


add_action('woocommerce_before_cart', 'referans_kodu_giris_formu');
function referans_kodu_giris_formu() {
    echo '';
    echo '';
    echo 'İndirimi Uygula';
    echo '';
}

Bu form, kullanıcının referans kodunu girmesini sağlar. Ancak bu formun bir de işlenmesi (processing) gerekir. Form gönderildiğinde, kodun veritabanında olup olmadığını kontrol eden bir sorgu çalıştırmalıyız.

Adım 4: Referans Kodunu Doğrulama ve İndirim Uygulama

Girilen kodun geçerliliğini kontrol eden ve WooCommerce sepetine indirim tanımlayan mantığı kuralım. Burada WC_Cart sınıfını kullanarak sepete dinamik bir indirim ekleyeceğiz.


add_action('woocommerce_cart_calculate_fees', 'referans_indirimi_uygula');
function referans_indirimi_uygula($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    if (isset($_POST['ref_kodu'])) {
        $girilen_kod = sanitize_text_field($_POST['ref_kodu']);
        
        // Veritabanında kodu ara
        $args = array('meta_key' => 'referans_kodu', 'meta_value' => $girilen_kod);
        $kullanici = get_users($args);

        if (!empty($kullanici)) {
            $cart->add_fee('Referans İndirimi', -10); // 10 birim indirim
        }
    }
}

Bu kod, veritabanında referans_kodu meta anahtarına sahip kullanıcıyı arar. Eğer kod eşleşirse, sepete 10 birimlik bir indirim ekler. sanitize_text_field ile güvenlik önlemini almayı ihmal etmiyoruz.

Karşılaştırma: Eklenti vs. Özel Kod

Özellik Özel Kod (Bu Rehber) Hazır Eklenti
Performans Çok Yüksek Orta
Esneklik Tam Kontrol Kısıtlı
Güvenlik Doğrudan Kontrol Güncelleme Bağlı

Güvenlik ve Debug İpuçları

Kritik Uyarı: Üretim ortamında (production) kodlarınızı çalıştırmadan önce mutlaka bir yedek alın. SQL sorgularında her zaman $wpdb->prepare veya yerleşik WordPress fonksiyonlarını (get_users gibi) kullanın. Doğrudan veritabanı sorgusu (SQL injection riski) yapmaktan kaçının.

Eğer indirim uygulanmıyorsa, öncelikle var_dump($_POST['ref_kodu']) ile verinin gelip gelmediğini kontrol edin. Ayrıca WooCommerce'in "Sepet Hesaplama" kancasının tetiklendiğinden emin olun.

Sıkça Sorulan Sorular

Referans kodunu nasıl daha karmaşık hale getirebilirim?

Kod oluşturma fonksiyonunda wp_hash yerine bin2hex(random_bytes(6)) kullanarak daha uzun ve rastgele karakter dizileri üretebilirsiniz.

İndirimi yüzde (%) olarak nasıl değiştirebilirim?

$cart->add_fee yerine $cart->subtotal * 0.10 gibi bir hesaplama yaparak yüzde 10 indirim tanımlayabilirsiniz.

Aynı kullanıcı kendi kodunu kullanabilir mi?

Evet, bunu engellemek için get_current_user_id() ile kodu giren kişinin ID'sini, bulunan kullanıcının ID'si ile karşılaştıran bir if bloğu ekleyebilirsiniz.

İndirimlerin kötüye kullanımını nasıl önlerim?

İndirim kullanımını bir "user meta" olarak kaydedip, her kullanıcının sadece bir kez indirim kullanmasına izin veren bir kontrol mekanizması kurmalısınız.

Bu sistem veritabanını yorar mı?

Kullanıcı meta verileri indekslendiği sürece (varsayılan WordPress davranışı), get_users sorgusu küçük ve orta ölçekli siteler için oldukça hızlı çalışacaktır.

Referans Sistemi İçin İleri Düzey Raporlama ve Analiz

Sistemin başarısını ölçmek, hangi referans kodunun daha fazla dönüşüm getirdiğini anlamak için kritik öneme sahiptir. WordPress veritabanında basit bir sorgu ile hangi kodun kaç kez kullanıldığını listeleyen bir yönetici paneli sayfası oluşturabilirsiniz.

Kullanım İstatistiklerini Yönetici Paneline Ekleme

Aşağıdaki kod parçası, WordPress yönetici panelinde "Referans İstatistikleri" adında bir sayfa oluşturarak, hangi referans kodunun ne kadar kullanıldığını veritabanından çeker.


add_action('admin_menu', 'referans_istatistik_menusu');
function referans_istatistik_menusu() {
    add_menu_page('Referans İstatistikleri', 'Referans Raporu', 'manage_options', 'ref-rapor', 'ref_rapor_sayfasi');
}

function ref_rapor_sayfasi() {
    global $wpdb;
    $results = $wpdb->get_results("SELECT meta_value, COUNT(*) as kullanim FROM {$wpdb->usermeta} WHERE meta_key = 'kullanilan_referans_kodu' GROUP BY meta_value");
    
    echo '

Referans Kullanım Raporu

'; echo ''; foreach ($results as $row) { echo ''; } echo '
Referans KoduKullanım Sayısı
' . esc_html($row->meta_value) . '' . esc_html($row->kullanim) . '
'; }

Sistem Performansını Optimize Etme

Kullanıcı sayısı arttıkça, veritabanı sorguları yavaşlayabilir. Özellikle get_users veya doğrudan wp_usermeta tablosuna yapılan sorgularda performans kaybı yaşamamak için aşağıdaki optimizasyon stratejilerini uygulayın.

Object Caching (Nesne Önbellekleme) Kullanımı

Referans kodunun geçerliliğini kontrol ederken her seferinde veritabanına gitmek yerine, WordPress'in wp_cache_get ve wp_cache_set fonksiyonlarını kullanarak sorguları belleğe alın.


function get_referans_sahibi_id($kod) {
    $cache_key = 'ref_owner_' . $kod;
    $owner_id = wp_cache_get($cache_key);
    
    if (false === $owner_id) {
        $users = get_users(array('meta_key' => 'referans_kodum', 'meta_value' => $kod, 'number' => 1));
        $owner_id = !empty($users) ? $users[0]->ID : null;
        wp_cache_set($cache_key, $owner_id, '', 3600); // 1 saat önbellekte tut
    }
    return $owner_id;
}

Veritabanı İndeksleme İpuçları

  • Meta Key İndeksi: wp_usermeta tablosunda meta_key sütununun indeksli olduğundan emin olun. WordPress bunu varsayılan olarak yapar, ancak büyük ölçekli sitelerde meta_value sütununa da indeks eklemek sorgu hızını %50'ye kadar artırabilir.
  • Transient API: Eğer referans kodları sık değişmiyorsa, veritabanı yerine set_transient kullanarak verileri geçici olarak saklayın.
  • Sorgu Sınırlandırma: get_users fonksiyonunu kullanırken her zaman 'number' => 1 parametresini ekleyerek gereksiz veri çekimini engelleyin.
Profesyonel Not: Eğer siteniz günlük 10.000'den fazla sipariş alıyorsa, bu verileri wp_usermeta yerine özel bir veritabanı tablosunda (Custom Table) tutmanız, ölçeklenebilirlik açısından çok daha sağlıklı olacaktır.

Sonuç

WordPress ile özel bir referans sistemi oluşturmak, sitenizin pazarlama stratejisini güçlendirmenin en temiz yoludur. Bu rehberde, kullanıcı bazlı meta verileri yönetmeyi, WooCommerce sepetine müdahale etmeyi ve güvenlik standartlarını uygulamayı öğrendiniz. Bir sonraki adım olarak, referans olan kişiye de bir puan veya kupon tanımlayan bir "ödül sistemi" ekleyerek yapınızı daha da geliştirebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Emre Yılmaz

Bilgi odaklı nasıl yapılır içerikleriyle karmaşık süreçleri herkes için anlaşılır kılıyorum. Okuyucularımın zamanını verimli kullanmalarını sağlayan stratejiler geliştiriyorum.

Yorumlar (0)

Yorum Yaz