Gereksinimler ve Ön Hazırlık
Sistemi geliştirmeye başlamadan önce aşağıdaki ortamın hazır olduğundan emin olmalısınız:
- WordPress 6.5+ ve WooCommerce 9.0+ sürümü.
- PHP 8.2 veya üzeri (modern sözdizimi kullanımı için).
- E-posta gönderimi için yapılandırılmış bir SMTP sunucusu (WP Mail SMTP gibi).
- Kod değişikliklerini güvenle yapabilmeniz için bir "Child Theme" (Alt Tema) veya özel bir eklenti yapısı.
Kritik Uyarı: Canlı sitenizde doğrudan değişiklik yapmadan önce mutlaka yedek alın. Kodlarınızı önce bir geliştirme (staging) ortamında test etmeniz, üretim ortamındaki hataları önlemek için hayati önem taşır.
Veritabanı Yapısının Planlanması
Stok uyarısı taleplerini saklamak için WordPress'in özel tablolarını veya wp_postmeta tablosunu kullanabiliriz. Ancak, ölçeklenebilirlik açısından özel bir veritabanı tablosu oluşturmak en temiz yöntemdir. Aşağıdaki kod, eklenti aktif edildiğinde gerekli tabloyu oluşturacaktır.
function st_stok_uyari_tablosunu_olustur() {
global $wpdb;
$table_name = $wpdb->prefix . 'stok_uyari_talepleri';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
user_email varchar(100) NOT NULL,
product_id bigint(20) NOT NULL,
status varchar(20) DEFAULT 'beklemede',
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
Bu fonksiyon, wp_stok_uyari_talepleri adında bir tablo oluşturur. dbDelta fonksiyonu, tablonun halihazırda var olup olmadığını kontrol eder ve sadece gerekli değişiklikleri uygular.
Ön Yüzde Talep Formu Oluşturma
Kullanıcıların stok uyarısı talep edebilmesi için ürün sayfasına bir form eklememiz gerekir. WooCommerce'in woocommerce_after_add_to_cart_form hook'unu kullanarak butonu stok durumu "tükendi" olan ürünlerde göstereceğiz.
add_action('woocommerce_after_add_to_cart_form', 'stok_uyari_formunu_goster');
function stok_uyari_formunu_goster() {
global $product;
if (!$product->is_in_stock()) {
echo '';
echo '';
echo '';
echo 'Stokta Gelince Haber Ver';
echo '';
}
}
Burada esc_attr fonksiyonunu kullanarak XSS (Cross-Site Scripting) saldırılarını engellemek için veriyi filtreliyoruz. Bu, WordPress güvenlik standartlarının temelidir.
Veri İşleme ve Güvenlik Önlemleri
Formdan gelen verileri yakalayıp veritabanına kaydetmek için bir işlem fonksiyonuna ihtiyacımız var. SQL Injection saldırılarına karşı hazırlıklı olmak için $wpdb->prepare kullanacağız.
add_action('init', 'stok_talep_kaydet');
function stok_talep_kaydet() {
if (isset($_POST['stok_talep_gonder']) && is_email($_POST['user_email'])) {
global $wpdb;
$table_name = $wpdb->prefix . 'stok_uyari_talepleri';
$email = sanitize_email($_POST['user_email']);
$product_id = intval($_POST['product_id']);
$wpdb->insert($table_name, array(
'user_email' => $email,
'product_id' => $product_id
), array('%s', '%d'));
echo 'Talebiniz alındı!
';
}
}
sanitize_email ve intval fonksiyonları, verinin beklenen formatta olmasını sağlar. $wpdb->insert metodu ise veritabanı sorgularını otomatik olarak hazırlar ve güvenli hale getirir.
Stok Güncellendiğinde Otomatik E-posta Gönderimi
Ürün stoğu güncellendiğinde, veritabanındaki kayıtları kontrol edip kullanıcılara e-posta gönderen bir tetikleyici (trigger) oluşturmalıyız. WooCommerce'in woocommerce_product_set_stock hook'u bu iş için idealdir.
add_action('woocommerce_product_set_stock', 'stok_guncellendiginde_uyar');
function stok_guncellendiginde_uyar($product) {
if ($product->get_stock_quantity() > 0) {
global $wpdb;
$table_name = $wpdb->prefix . 'stok_uyari_talepleri';
$talepler = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE product_id = %d AND status = 'beklemede'", $product->get_id()));
foreach ($talepler as $talep) {
wp_mail($talep->user_email, 'Ürün Stokta!', 'İstediğiniz ürün tekrar stoklara girdi.');
$wpdb->update($table_name, array('status' => 'gonderildi'), array('id' => $talep->id));
}
}
}
Bu kod, stok miktarı 0'dan büyük olduğunda veritabanını tarar, ilgili kullanıcılara e-posta gönderir ve durumlarını 'gönderildi' olarak günceller.
Yöntem Karşılaştırması
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Özel Kodlama (Bu rehber) | Tam kontrol, sıfır maliyet, hafif yapı. | Teknik bilgi gerektirir. |
| Hazır Eklenti | Hızlı kurulum, arayüz desteği. | Siteyi yavaşlatabilir, yıllık ücret. |
Güvenlik Sorumluluk Reddi: Bu rehberde sunulan kodlar eğitim amaçlıdır. Üretim ortamında kullanmadan önce SQL Injection, XSS ve veri sızıntılarına karşı profesyonel bir güvenlik denetiminden geçirilmelidir. Kodların yanlış yapılandırılması veritabanı bütünlüğünü bozabilir.
Sıkça Sorulan Sorular
Stok uyarısı e-postaları neden gitmiyor?
Sunucunuzun PHP mail() fonksiyonu kapalı olabilir. WP Mail SMTP eklentisini kullanarak bir SMTP sağlayıcısı (Gmail, SendGrid vb.) üzerinden e-posta gönderimini yapılandırın.
Bu sistem değişken ürünlerde çalışır mı?
Yukarıdaki kod basit ürünler içindir. Değişken ürünler için variation_id kontrolü eklemeniz ve formda varyasyon seçimine göre ID'yi güncellemeniz gerekir.
Veritabanı çok büyürse ne yapmalıyım?
Düzenli olarak status = 'gonderildi' olan kayıtları 30 gün sonra silen bir WP-Cron görevi oluşturarak veritabanı yükünü hafifletebilirsiniz.
GDPR uyumluluğu için ne yapmalıyım?
Formunuza bir "KVKK Aydınlatma Metnini okudum ve onaylıyorum" onay kutusu (checkbox) eklemeli ve bu onayı veritabanında saklamalısınız.
Sistem performansını nasıl ölçerim?
Query Monitor eklentisini kullanarak veritabanı sorgularınızın çalışma süresini ve bellek kullanımını takip edebilirsiniz.
Sistem Performansını Optimize Etmek İçin İleri Teknikler
Stok uyarı sisteminiz büyüdükçe, özellikle yüksek trafikli mağazalarda veritabanı sorguları sitenizin genel hızını etkileyebilir. Kullanıcı deneyimini korumak için veritabanı işlemlerini optimize etmeniz kritik öneme sahiptir.
Transients API Kullanımı
Stok durumu kontrollerini her sayfa yüklenmesinde veritabanına sormak yerine, WordPress Transients API kullanarak belirli bir süre için önbelleğe alabilirsiniz. Bu, özellikle popüler ürünlerde veritabanı yükünü %80 oranında azaltabilir.
function get_cached_stock_status($product_id) {
$transient_key = 'stock_status_' . $product_id;
$status = get_transient($transient_key);
if (false === $status) {
$product = wc_get_product($product_id);
$status = $product->get_stock_status();
set_transient($transient_key, $status, HOUR_IN_SECONDS);
}
return $status;
}
Sistem Hata Ayıklama ve Loglama Stratejileri
Sistemin arka planda nasıl çalıştığını izlemek için özel bir hata ayıklama (debug) günlüğü tutmak, e-posta gönderim hatalarını veya veritabanı çakışmalarını tespit etmenize yardımcı olur. WordPress'in yerleşik error_log fonksiyonunu kullanarak kritik olayları kaydedebilirsiniz.
Özel Log Dosyası Oluşturma
Aşağıdaki kod bloğu, e-posta gönderim hatalarını wp-content/debug.log dosyasına yazdırarak, sistemin sessizce başarısız olmasını engeller.
function log_stock_alert_error($message) {
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('[Stok Uyarı Sistemi]: ' . $message);
}
}
// E-posta gönderiminde kullanımı
if (!wp_mail($to, $subject, $message)) {
log_stock_alert_error('E-posta gönderilemedi: ' . $product_id . ' - Kullanıcı: ' . $email);
}
Dağıtım (Deployment) ve Test Senaryoları
Sistemi canlıya almadan önce bir "Staging" ortamında test etmeniz zorunludur. Özellikle e-posta sunucularının (SMTP) yapılandırması, canlı ortamda farklılık gösterebilir.
- SMTP Testi: E-postaların spam kutusuna düşmediğinden emin olmak için Mail-Tester gibi araçlar kullanın.
- Yük Testi: Aynı anda 50+ kullanıcının stok uyarısı kaydı oluşturması durumunda veritabanı kilitlenmelerini gözlemleyin.
- Cron Job Kontrolü: WordPress WP-Cron zamanlamalarının sunucu kaynaklı gecikmelere uğramadığını
WP Crontroleklentisi ile doğrulayın.
İpucu: Eğer yüksek hacimli bir mağazaya sahipseniz, e-posta gönderim işlemlerini PHP'nin ana döngüsünden çıkarıp bir kuyruk sistemi (Action Scheduler gibi) üzerinden yönetmeniz, sitenizin yanıt süresini (TTFB) ciddi oranda iyileştirecektir.
Sonuç
WordPress ile özel bir dinamik e-ticaret stok uyarı sistemi oluşturmak, sitenizin kullanıcı deneyimini doğrudan iyileştiren ve satışlarınızı artıran bir yatırımdır. Bu rehberde, veritabanı oluşturmaktan e-posta tetikleyicilerine kadar tüm süreci adım adım inceledik. Bir sonraki adım olarak, bu sisteme bir "Yönetici Paneli" ekleyerek bekleyen talepleri görmenizi sağlayacak bir arayüz geliştirebilirsiniz.

Yorumlar (0)
Yorum Yaz