Takip Edin

WordPress WooCommerce Hesabımı Sil Özelliği Nasıl Eklenir?

WooCommerce kullanan birçok sitede kullanıcılar üye oluyor, sipariş veriyor ve hesap panelini aktif olarak kullanıyor. Böyle bir yapıda kullanıcıların kendi hesapları üzerinde daha fazla kontrol sahibi olmak istemesi oldukça normaldir. Bu nedenle Hesabımı Sil özelliği, birçok WordPress ve WooCommerce projesinde ihtiyaç hâline gelmiştir.

Bu yazıda, WooCommerce altyapılı sitenize Hesabım alanında çalışan bir hesap silme özelliğini nasıl ekleyebileceğinizi anlatıyorum. Üstelik bunu ekstra bir eklenti geliştirmeden, doğrudan Code Snippets veya WPCode ile yapabilirsiniz.

Hesap silme özelliği neden önemlidir?

Bir kullanıcı sitenizde hesap oluşturabiliyorsa, giriş yapabiliyorsa ve kendi profil bilgilerine erişebiliyorsa, hesabını yönetebilmesi de beklenir. Bu yönetimin önemli parçalarından biri de hesap silme işlemidir.

Kullanıcıların kendi hesaplarını silebilmesi şu açılardan önemlidir:

  • Kullanıcı deneyimini güçlendirir
  • Hesap yönetimini daha profesyonel hâle getirir
  • Üyelik sistemini daha güven veren bir yapıya taşır
  • Mobil uygulama ve web uyumluluğunda daha güçlü bir altyapı sunar

Özellikle WooCommerce tabanlı projelerde, bu tarz bir alanın eksik olması birçok projede sonradan ihtiyaç olarak karşımıza çıkar.

Bu sistem ne işe yarar?

Eklenen yapı sayesinde kullanıcı, Hesabım alanından kendi hesabını silme işlemini başlatabilir. Genelde bu sistem şu şekilde çalışır:

  • Kullanıcı hesabına giriş yapar
  • Hesabım paneline gider
  • Hesabımı Sil alanını görür
  • Şifresini girerek işlemi onaylar
  • Hesabı sistemden kaldırılır

Bu süreçte yönetici hesapları korunabilir, ek güvenlik adımları eklenebilir ve işlem daha kontrollü hâle getirilebilir.

Hangi yöntemle kurulabilir?

Bu özelliği eklemek için en pratik yöntemlerden biri, özel PHP kodunu WordPress içine güvenli şekilde eklemektir. Bunun için en çok kullanılan iki araç şunlardır:

Code Snippets ile kurulum

Code Snippets eklentisi, temanın dosyalarına girmeden özel PHP kodları eklemenizi sağlar. Kurulum için şu adımları izleyebilirsiniz:

  • WordPress panelinden Eklentiler > Yeni Ekle bölümüne girin
  • Code Snippets eklentisini kurup etkinleştirin
  • Snippets > Yeni Ekle alanına girin
  • PHP kodunu yapıştırın
  • Kodun site genelinde çalışmasını sağlayın
  • Kaydedip etkinleştirin

WPCode ile kurulum

WPCode kullananlar için mantık benzerdir:

  • WPCode panelini açın
  • Yeni bir özel PHP snippet oluşturun
  • Kodunuzu ekleyin
  • Otomatik çalışacak şekilde ayarlayın
  • Kaydedip etkinleştirin

Her iki yöntemde de amaç aynıdır: tema dosyalarına dokunmadan özel işlev eklemek.

Kurulum sonrası dikkat edilmesi gereken önemli adım

Eğer eklediğiniz kod WooCommerce içinde yeni bir sekme, özel bir bağlantı veya endpoint oluşturuyorsa, kurulumdan sonra şu adımı uygulamanız gerekir:

Ayarlar > Kalıcı Bağlantılar > Yazı Adı > Kaydet

Burada ekstra bir değişiklik yapmanıza gerek yoktur. Sadece kaydetmeniz yeterlidir. Bu işlem, WordPress’in bağlantı yapısını yeniden oluşturmasını sağlar.

Bu adım yapılmazsa yeni eklenen bağlantılarda 404 hatası alınabilir.

En sağlıklı kullanım şekli nedir?

Bu özelliği iki farklı mantıkla sunabilirsiniz:

1. Hesabım menüsünde ayrı sekme olarak

Bu yöntemde kullanıcı, WooCommerce hesap panelinde doğrudan Hesabımı Sil sekmesini görür. Daha düzenli ve profesyonel görünür.

2. Hesap detayları sayfasının altında kutu olarak

Bu yöntem daha sade ve daha az sorun çıkaran bir yapıdır. Özellikle bazı tema ve endpoint çakışmalarında daha güvenli çalışır.

Projeye göre iki yöntemden biri tercih edilebilir. Eğer sitenizde özel tema müdahaleleri varsa, hesap detaylarının altına kutu olarak eklemek daha stabil olabilir.

Hesap silme alanında neler olmalı?

Sağlıklı bir hesap silme alanında şu unsurlar yer almalıdır:

  • Açık bir başlık
  • İşlemin geri alınamaz olduğunu belirten uyarı
  • Şifre doğrulama alanı
  • Güvenli onay butonu
  • Yönetici hesaplarını koruyan kontrol
  • Gerekirse sipariş kayıtlarını koruyan yapı

Bu detaylar, sistemin hem güvenli hem de kullanıcı dostu olmasını sağlar.

Neden şifre doğrulaması eklenmeli?

Kullanıcı giriş yapmış olsa bile, hesap silme gibi kritik işlemlerde tekrar şifre doğrulaması istemek çok önemlidir. Bu sayede:

  • Yanlışlıkla hesap silme riski azalır
  • Başka biri açık oturumdan yararlanarak hesabı silemez
  • İşlem daha güvenli hâle gelir

Bu nedenle hesap silme özelliği kurulurken mutlaka ek doğrulama düşünülmelidir.

Siparişler ne olur?

WooCommerce projelerinde en çok sorulan konulardan biri budur. Kullanıcı hesabı silinse bile sipariş kayıtlarının sistem düzeni açısından korunması gerekebilir. Bu yüzden birçok kurulumda kullanıcı silinirken siparişler misafir kullanıcıya bağlanır veya sistemde kayıt olarak tutulur.

Bu detay, kullanılan yapıya göre değişebilir. Ancak e-ticaret sitelerinde sipariş geçmişi tarafı dikkatli planlanmalıdır.

WooCommerce sitenize Hesabımı Sil özelliği eklemek, kullanıcı hesabı yönetimini daha güçlü ve daha profesyonel bir seviyeye taşır. Üstelik bunu çoğu projede Code Snippets veya WPCode ile oldukça pratik şekilde kurabilirsiniz.

Doğru yapı kurulduğunda kullanıcılar hesaplarını daha kontrollü yönetir, site daha güven veren bir yapıya kavuşur ve üyelik sistemi daha tamamlanmış görünür.

Eğer projede ayrı sekmeli bir yapı istemiyorsanız, hesap detayları altında çalışan daha sade bir sistem de tercih edebilirsiniz. Önemli olan, işlemin güvenli, anlaşılır ve düzgün çalışan bir şekilde sunulmasıdır.

if (!defined('ABSPATH')) {
    exit;
}

/**
 * WooCommerce Hesabım > Hesabımı Sil
 * Code Snippets içine tek parça eklenebilir.
 */

/* Endpoint oluştur */
add_action('init', function () {
    add_rewrite_endpoint('hesabimi-sil', EP_ROOT | EP_PAGES);
});

/* Query var ekle */
add_filter('query_vars', function ($vars) {
    $vars[] = 'hesabimi-sil';
    return $vars;
});

/* Menüye Hesabımı Sil sekmesini ekle */
add_filter('woocommerce_account_menu_items', function ($items) {
    $logout = array();

    if (isset($items['customer-logout'])) {
        $logout['customer-logout'] = $items['customer-logout'];
        unset($items['customer-logout']);
    }

    $items['hesabimi-sil'] = 'Hesabımı Sil';

    return array_merge($items, $logout);
}, 99);

/* Sekme içeriği */
add_action('woocommerce_account_hesabimi-sil_endpoint', function () {
    if (!is_user_logged_in()) {
        echo '<div class="woocommerce-info">Bu işlemi yapmak için giriş yapmalısınız.</div>';
        return;
    }

    $user = wp_get_current_user();
    ?>
    <div class="bolcal-hesap-sil-wrap">
        <style>
            .bolcal-hesap-sil-wrap{
                margin-top: 10px;
            }
            .bolcal-hesap-sil-kutu{
                background: #ffffff;
                border: 1px solid #e5e7eb;
                border-radius: 12px;
                padding: 24px;
                box-shadow: 0 6px 18px rgba(0,0,0,.04);
                max-width: 700px;
            }
            .bolcal-hesap-sil-baslik{
                font-size: 26px;
                font-weight: 700;
                margin: 0 0 14px;
                color: #111827;
            }
            .bolcal-hesap-sil-aciklama{
                font-size: 15px;
                line-height: 1.7;
                color: #4b5563;
                margin: 0 0 16px;
            }
            .bolcal-hesap-sil-uyari{
                color: #dc2626;
                font-size: 15px;
                font-weight: 600;
                margin: 0 0 18px;
                line-height: 1.6;
            }
            .bolcal-hesap-sil-form label{
                display: block;
                font-size: 15px;
                font-weight: 600;
                color: #111827;
                margin-bottom: 10px;
            }
            .bolcal-hesap-sil-form input[type="password"]{
                width: 100%;
                max-width: 420px;
                min-height: 52px;
                border: 1px solid #d1d5db;
                border-radius: 10px;
                padding: 0 14px;
                font-size: 15px;
                background: #fff;
                margin-bottom: 14px;
            }
            .bolcal-hesap-sil-form button{
                background: #e10600;
                color: #fff;
                border: none;
                border-radius: 10px;
                padding: 14px 26px;
                font-size: 16px;
                font-weight: 700;
                cursor: pointer;
                transition: .2s ease;
            }
            .bolcal-hesap-sil-form button:hover{
                opacity: .92;
                transform: translateY(-1px);
            }
            .bolcal-hesap-sil-bilgi{
                margin-top: 14px;
                font-size: 13px;
                color: #6b7280;
                line-height: 1.7;
            }
        </style>

        <div class="bolcal-hesap-sil-kutu">
            <h2 class="bolcal-hesap-sil-baslik">Hesabımı Sil</h2>

            <?php if (user_can($user->ID, 'administrator')) : ?>
                <div class="bolcal-hesap-sil-uyari">
                    Uyarı: Bu hesap yönetici yetkisine sahip olduğu için bu alandan silinemez.
                </div>
                <p class="bolcal-hesap-sil-aciklama">
                    Güvenlik nedeniyle yönetici hesapları kullanıcı panelinden silinemez.
                </p>
            <?php else : ?>
                <p class="bolcal-hesap-sil-aciklama">
                    Hesabınızı sildiğinizde hesap bilgileriniz kalıcı olarak kaldırılır. Bu işlem geri alınamaz.
                </p>

                <div class="bolcal-hesap-sil-uyari">
                    Devam etmek için mevcut şifrenizi girerek işlemi onaylayın.
                </div>

                <form class="bolcal-hesap-sil-form" method="post">
                    <label for="bolcal_hesap_sil_sifre">Onay için şifrenizi girin</label>
                    <input type="password" id="bolcal_hesap_sil_sifre" name="bolcal_hesap_sil_sifre" required>

                    <?php wp_nonce_field('bolcal_hesap_sil_action', 'bolcal_hesap_sil_nonce'); ?>
                    <input type="hidden" name="bolcal_hesap_sil_gonder" value="1">

                    <button type="submit">Onayla ve Hesabımı Sil</button>

                    <div class="bolcal-hesap-sil-bilgi">
                        Sipariş kayıtları sistem düzeni için saklanabilir, ancak hesap erişiminiz kaldırılır.
                    </div>
                </form>
            <?php endif; ?>
        </div>
    </div>
    <?php
});

/* Form gönderimini işle */
add_action('template_redirect', function () {
    if (
        !is_user_logged_in() ||
        !function_exists('is_account_page') ||
        !is_account_page() ||
        !isset($_POST['bolcal_hesap_sil_gonder'])
    ) {
        return;
    }

    $user = wp_get_current_user();

    if (!$user || empty($user->ID)) {
        return;
    }

    if (user_can($user->ID, 'administrator')) {
        wc_add_notice('Yönetici hesabı bu alandan silinemez.', 'error');
        return;
    }

    if (
        !isset($_POST['bolcal_hesap_sil_nonce']) ||
        !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['bolcal_hesap_sil_nonce'])), 'bolcal_hesap_sil_action')
    ) {
        wc_add_notice('Güvenlik doğrulaması başarısız oldu. Lütfen tekrar deneyin.', 'error');
        return;
    }

    $password = isset($_POST['bolcal_hesap_sil_sifre']) ? (string) wp_unslash($_POST['bolcal_hesap_sil_sifre']) : '';

    if ($password === '') {
        wc_add_notice('Lütfen şifrenizi girin.', 'error');
        return;
    }

    $auth_user = wp_authenticate($user->user_login, $password);

    if (is_wp_error($auth_user)) {
        wc_add_notice('Girdiğiniz şifre hatalı.', 'error');
        return;
    }

    if (!function_exists('wp_delete_user')) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
    }

    if (function_exists('wc_get_orders')) {
        $orders = wc_get_orders(array(
            'customer_id' => $user->ID,
            'limit'       => -1,
            'return'      => 'ids',
        ));

        if (!empty($orders) && is_array($orders)) {
            foreach ($orders as $order_id) {
                update_post_meta($order_id, '_customer_user', 0);
            }
        }
    }

    wp_logout();
    wp_delete_user($user->ID);

    wp_safe_redirect(home_url('/'));
    exit;
});

Yorumlar
Topluluğumuza Katılın ve Fikrinizi Paylaşın
Yorum Ekle

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir