WooCommerce Sipariş Tamamlanma E-postasını Özelleştirme

WooCommerce mağazanızı kurdunuz, siparişler gelmeye başladı. Güzel. Ama müşteriniz sipariş verdikten sonra aldığı e-posta hâlâ “Your order has been received” diyor ve altında dümdüz bir liste var. Marka kimliğinizden eser yok, müşteriye özel bir mesaj yok, hiçbir şey yok. İşte bu yazıda bu sorunu kökten çözeceğiz.

WooCommerce’in sipariş tamamlanma e-postasını özelleştirmek için iki yol var: tema editörüyle uğraşmak ya da functions.php üzerinden kod yazarak tam kontrol sağlamak. Biz ikinci yolu tercih edeceğiz çünkü tema değişse bile kodunuz çalışmaya devam eder, üstelik çok daha fazla esneklik sunar.

Neden functions.php Kullanmalısınız?

WooCommerce e-posta şablonlarını doğrudan /wp-content/plugins/woocommerce/templates/emails/ altındaki dosyaları kopyalayıp temanıza taşıyarak özelleştirebilirsiniz. Bu geçerli bir yöntem. Ama her WooCommerce güncellemesinde şablon dosyaları değişebilir ve sizin kopyaladığınız dosya eski kalır. Hata ayıklamakla vakit kaybedersiniz.

functions.php yönteminde ise WooCommerce’in kendi hook sistemini kullanıyorsunuz. Güncelleme gelsin, hook’larınız çalışmaya devam eder. Ayrıca tüm özelleştirmeleriniz tek bir yerde toplanır, yönetmesi çok daha kolaydır.

Çocuk tema kullanıyorsanız kodu çocuk temanın functions.php dosyasına yazın. Kullanmıyorsanız özel bir eklenti oluşturmanızı öneririm ama bu yazıda functions.php üzerinden ilerleyeceğiz.

E-posta Konusunu Değiştirme

En basit özelleştirmeden başlayalım. WooCommerce’in varsayılan sipariş tamamlanma e-posta konusu oldukça generik. Kendi markanıza uygun, kişiselleştirilmiş bir konu satırı çok daha yüksek açılma oranı sağlar.

// Sipariş tamamlanma e-postası konu satırını özelleştir
add_filter( 'woocommerce_email_subject_customer_completed_order', 'custom_completed_order_email_subject', 10, 2 );

function custom_completed_order_email_subject( $subject, $order ) {
    $billing_first_name = $order->get_billing_first_name();
    $order_number       = $order->get_order_number();
    
    $subject = sprintf(
        '%s, siparişiniz #%s yola çıktı! 🎉',
        $billing_first_name,
        $order_number
    );
    
    return $subject;
}

Bu kod müşterinin adını ve sipariş numarasını otomatik olarak çekiyor. “Ahmet, siparişiniz #1042 yola çıktı!” gibi kişiselleştirilmiş bir konu satırı elde ediyorsunuz. Emoji kullanmak açılma oranlarını artırıyor, test etmeye değer.

E-posta Başlığını Özelleştirme

Konu satırını değiştirdik ama e-posta açıldığında görünen başlık hâlâ varsayılan. Bunu da değiştirelim:

// E-posta başlığını (heading) özelleştir
add_filter( 'woocommerce_email_heading_customer_completed_order', 'custom_completed_order_email_heading', 10, 2 );

function custom_completed_order_email_heading( $heading, $order ) {
    $billing_first_name = $order->get_billing_first_name();
    
    $heading = sprintf(
        'Harika haber, %s! Siparişiniz hazırlandı.',
        $billing_first_name
    );
    
    return $heading;
}

E-posta Gönderici Adı ve Adresini Değiştirme

Varsayılan olarak WooCommerce sitenizin yönetici e-postasını kullanır. Müşteri “[email protected]” gibi bir adresten gelen e-postayı açmak istemez. Daha insani bir gönderici adı ve adresi ayarlayalım:

// E-posta gönderici adını değiştir
add_filter( 'woocommerce_email_from_name', 'custom_woo_email_from_name', 10, 1 );

function custom_woo_email_from_name( $from_name ) {
    return 'Mağaza Ekibi - ExampleShop';
}

// E-posta gönderici adresini değiştir
add_filter( 'woocommerce_email_from_address', 'custom_woo_email_from_address', 10, 1 );

function custom_woo_email_from_address( $from_address ) {
    return '[email protected]';
}

Bu değişiklik tüm WooCommerce e-postalarını etkiler. Sadece tamamlanma e-postasını etkilemesini istiyorsanız fonksiyon içinde e-posta tipini kontrol etmeniz gerekir, biraz aşağıda buna da değineceğiz.

E-posta İçeriğine Özel Mesaj Eklemek

Gerçek hayatta en çok ihtiyaç duyulan şey şu: sipariş tamamlanma e-postasının başına veya sonuna özel bir mesaj eklemek. Belki bir teşekkür mesajı, belki kargo takip bilgisi, belki bir indirim kuponu.

WooCommerce bunun için iki hook sunuyor:

  • woocommerce_email_before_order_table: Sipariş tablosundan önce içerik ekler
  • woocommerce_email_after_order_table: Sipariş tablosundan sonra içerik ekler
// Sipariş tablosundan önce özel mesaj ekle
add_action( 'woocommerce_email_before_order_table', 'add_custom_message_before_order_table', 10, 4 );

function add_custom_message_before_order_table( $order, $sent_to_admin, $plain_text, $email ) {
    // Sadece tamamlanma e-postasında çalıştır
    if ( 'customer_completed_order' !== $email->id ) {
        return;
    }
    
    // Plain text versiyonunda HTML olmaz
    if ( $plain_text ) {
        echo "Teşekkür ederiz! Siparişiniz başarıyla tamamlandı.nn";
        return;
    }
    
    $billing_first_name = $order->get_billing_first_name();
    
    echo '<div style="margin-bottom: 20px; padding: 15px; background-color: #f7f7f7; border-left: 4px solid #96588a;">';
    echo '<p style="margin: 0; font-size: 16px; color: #333;">Merhaba <strong>' . esc_html( $billing_first_name ) . '</strong>,</p>';
    echo '<p style="margin: 10px 0 0 0; color: #555;">Siparişinizi büyük bir özenle hazırladık ve kargoya teslim ettik. Umarız ürünlerimizden memnun kalırsınız!</p>';
    echo '</div>';
}

$email->id kontrolü kritik önem taşıyor. Bu olmadan mesajınız tüm WooCommerce e-postalarında görünür, yani bir iade e-postasında da “Siparişinizi büyük bir özenle hazırladık” yazar. Oldukça tuhaf bir durum olur.

Sipariş Tamamlandığında Otomatik İndirim Kuponu Gönderme

Bu senaryo gerçekten sık kullanılıyor. Müşteri siparişini aldıktan sonra bir sonraki alışverişi için indirim kuponu gönderiyorsunuz. Hem müşteri sadakatini artırıyor hem de tekrar satın almayı teşvik ediyor.

// Sipariş tamamlanma e-postasına kupon kodu ekle
add_action( 'woocommerce_email_after_order_table', 'add_coupon_to_completed_order_email', 10, 4 );

function add_coupon_to_completed_order_email( $order, $sent_to_admin, $plain_text, $email ) {
    if ( 'customer_completed_order' !== $email->id ) {
        return;
    }
    
    // Admin'e gönderilen kopyaya ekleme
    if ( $sent_to_admin ) {
        return;
    }
    
    // Burada kendi sabit kupon kodunuzu kullanabilirsiniz
    // Ya da dinamik kupon oluşturmak için WooCommerce coupon API'ını kullanabilirsiniz
    $coupon_code = 'TESEKKUR10';
    
    if ( $plain_text ) {
        echo "nn--- ÖZEL TEKLİF ---n";
        echo "Bir sonraki alışverişinizde %10 indirim kazandınız!n";
        echo "Kupon Kodunuz: " . $coupon_code . "n";
        echo "Bu kod 30 gün geçerlidir.n";
        return;
    }
    
    echo '<div style="margin-top: 25px; padding: 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 8px; text-align: center;">';
    echo '<h2 style="color: #ffffff; margin: 0 0 10px 0; font-size: 20px;">🎁 Size Özel Hediyeniz!</h2>';
    echo '<p style="color: #f0e6ff; margin: 0 0 15px 0;">Bir sonraki alışverişinizde <strong style="color: #fff;">%10 indirim</strong> kazandınız.</p>';
    echo '<div style="background: rgba(255,255,255,0.2); padding: 10px 20px; border-radius: 5px; display: inline-block; margin: 0 auto;">';
    echo '<span style="color: #fff; font-size: 22px; font-weight: bold; letter-spacing: 3px;">' . esc_html( $coupon_code ) . '</span>';
    echo '</div>';
    echo '<p style="color: #d4b8ff; font-size: 12px; margin: 10px 0 0 0;">Bu kod 30 gün süreyle geçerlidir.</p>';
    echo '</div>';
}

E-posta Footer Metnini Özelleştirme

E-posta altbilgisi genellikle yasal bildirimler, iletişim adresi ve sosyal medya linkleri için kullanılır. WooCommerce bunu da hook ile özelleştirmenize izin veriyor:

// E-posta footer metnini özelleştir
add_filter( 'woocommerce_email_footer_text', 'custom_woo_email_footer_text' );

function custom_woo_email_footer_text( $footer_text ) {
    $footer_text = 'ExampleShop &copy; ' . date('Y') . ' | ';
    $footer_text .= 'Tüm hakları saklıdır. | ';
    $footer_text .= 'Sorularınız için: [email protected] | ';
    $footer_text .= 'Bu e-postayı almak istemiyorsanız <a href="{unsubscribe_url}">buraya tıklayın</a>.';
    
    return $footer_text;
}

E-posta Stilini (CSS) Özelleştirme

WooCommerce e-postalarının görsel tasarımını da hook üzerinden değiştirebilirsiniz. Renkleri, font boyutlarını, arka plan renklerini ayarlamak için:

// E-posta CSS stillerini özelleştir
add_filter( 'woocommerce_email_styles', 'custom_woo_email_styles' );

function custom_woo_email_styles( $css ) {
    $custom_css = '
        body {
            background-color: #f5f5f5 !important;
        }
        
        #template_header {
            background-color: #2c3e50 !important;
        }
        
        #template_header h1,
        #template_header h1 a {
            color: #ffffff !important;
        }
        
        #template_footer td {
            background-color: #2c3e50 !important;
            color: #aaaaaa !important;
        }
        
        .button {
            background-color: #e74c3c !important;
            border-radius: 4px !important;
        }
        
        h2 {
            color: #2c3e50 !important;
        }
    ';
    
    return $css . $custom_css;
}

Bu yöntem oldukça pratik. Ancak bazı e-posta istemcilerinin CSS desteği sınırlı olduğunu unutmayın. Özellikle Gmail ve Outlook inline style tercih eder. Yukarıdaki CSS’in tüm istemcilerde çalışacağının garantisi yok, geniş çaplı test yapmanız gerekebilir.

Belirli Koşullara Göre E-posta İçeriği Değiştirme

Gerçek dünya senaryolarında basit bir mesaj eklemek yetmez. Siparişin içeriğine veya müşterinin geçmişine göre farklı içerik göstermek isteyebilirsiniz.

Örneğin sipariş belirli bir kategorideki ürünler içeriyorsa farklı bir mesaj göster:

// Sipariş içeriğine göre koşullu mesaj ekle
add_action( 'woocommerce_email_after_order_table', 'add_conditional_message_to_completed_email', 15, 4 );

function add_conditional_message_to_completed_email( $order, $sent_to_admin, $plain_text, $email ) {
    if ( 'customer_completed_order' !== $email->id || $sent_to_admin || $plain_text ) {
        return;
    }
    
    $has_electronics   = false;
    $has_fragile_items = false;
    $order_total       = $order->get_total();
    
    foreach ( $order->get_items() as $item ) {
        $product    = $item->get_product();
        $categories = get_the_terms( $product->get_id(), 'product_cat' );
        
        if ( $categories ) {
            foreach ( $categories as $category ) {
                if ( 'elektronik' === $category->slug ) {
                    $has_electronics = true;
                }
                if ( 'kirilgan-urunler' === $category->slug ) {
                    $has_fragile_items = true;
                }
            }
        }
    }
    
    // Elektronik ürün içeriyorsa kurulum notu göster
    if ( $has_electronics ) {
        echo '<div style="margin-top: 20px; padding: 15px; background-color: #e8f4fd; border: 1px solid #3498db; border-radius: 5px;">';
        echo '<p style="margin: 0; color: #2980b9;"><strong>📱 Elektronik Ürün Notu:</strong></p>';
        echo '<p style="margin: 5px 0 0 0; color: #555;">Ürününüzün kurulumu hakkında yardım almak için <a href="https://example.com/kurulum-rehberi">kurulum rehberimizi</a> inceleyebilirsiniz.</p>';
        echo '</div>';
    }
    
    // Kırılgan ürün içeriyorsa özel uyarı göster
    if ( $has_fragile_items ) {
        echo '<div style="margin-top: 20px; padding: 15px; background-color: #fef9e7; border: 1px solid #f39c12; border-radius: 5px;">';
        echo '<p style="margin: 0; color: #e67e22;"><strong>⚠️ Kırılgan Ürün Uyarısı:</strong></p>';
        echo '<p style="margin: 5px 0 0 0; color: #555;">Paketinizi teslim alırken dikkatlice açınız. Hasar durumunda 48 saat içinde bize bildirin.</p>';
        echo '</div>';
    }
    
    // Yüksek tutarlı siparişe özel mesaj
    if ( $order_total >= 500 ) {
        echo '<div style="margin-top: 20px; padding: 15px; background-color: #fdf2f8; border: 1px solid #9b59b6; border-radius: 5px;">';
        echo '<p style="margin: 0; color: #8e44ad;"><strong>⭐ VIP Müşteri Ayrıcalığı:</strong></p>';
        echo '<p style="margin: 5px 0 0 0; color: #555;">500 TL üzeri alışverişiniz nedeniyle öncelikli müşteri desteğimizden yararlanabilirsiniz. Doğrudan hattımız: 0850 XXX XX XX</p>';
        echo '</div>';
    }
}

E-posta Alıcılarını Dinamik Olarak Değiştirme

Bazı durumlarda sipariş tamamlandığında sadece müşteriye değil, ek adreslere de e-posta göndermek isteyebilirsiniz. Örneğin muhasebe departmanınıza veya depo sorumlusuna:

// Tamamlanma e-postasına ek alıcılar ekle
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'add_extra_recipients_completed_order', 10, 2 );

function add_extra_recipients_completed_order( $recipient, $order ) {
    // Sipariş tutarı 1000 TL üzerindeyse muhasebe departmanını da bilgilendir
    if ( $order && $order->get_total() >= 1000 ) {
        $recipient .= ',[email protected]';
    }
    
    return $recipient;
}

Tüm Fonksiyonları Bir Arada Kullanma – Örnek Senaryo

Şimdiye kadar öğrendiklerimizi bir araya getirelim. Diyelim ki bir e-ticaret sitesi işletiyorsunuz ve şu gereksinimlere sahipsiniz:

  • Kişiselleştirilmiş konu satırı müşterinin adıyla
  • Teşekkür mesajı siparişin üstünde
  • Kupon kodu siparişin altında
  • Kargo bilgisi varsa meta veriden çekilerek
// Kargo takip numarasını e-postaya ekle
add_action( 'woocommerce_email_after_order_table', 'add_tracking_info_to_completed_email', 5, 4 );

function add_tracking_info_to_completed_email( $order, $sent_to_admin, $plain_text, $email ) {
    if ( 'customer_completed_order' !== $email->id || $sent_to_admin ) {
        return;
    }
    
    // Kargo takip numarasını order meta'dan çek
    // Bu meta key'i kullandığınız kargo eklentisine göre değişir
    $tracking_number  = $order->get_meta( '_tracking_number' );
    $tracking_company = $order->get_meta( '_tracking_company' );
    $tracking_url     = $order->get_meta( '_tracking_url' );
    
    if ( empty( $tracking_number ) ) {
        return;
    }
    
    if ( $plain_text ) {
        echo "n--- KARGO TAKİP BİLGİSİ ---n";
        echo "Kargo Firması: " . $tracking_company . "n";
        echo "Takip Numarası: " . $tracking_number . "n";
        if ( $tracking_url ) {
            echo "Takip Linki: " . $tracking_url . "n";
        }
        return;
    }
    
    echo '<div style="margin-top: 20px; padding: 20px; background-color: #eafaf1; border: 1px solid #27ae60; border-radius: 5px;">';
    echo '<h3 style="margin: 0 0 10px 0; color: #1e8449;">🚚 Kargo Takip Bilgisi</h3>';
    
    if ( $tracking_company ) {
        echo '<p style="margin: 0 0 5px 0; color: #555;"><strong>Kargo Firması:</strong> ' . esc_html( $tracking_company ) . '</p>';
    }
    
    echo '<p style="margin: 0 0 5px 0; color: #555;"><strong>Takip Numarası:</strong> ' . esc_html( $tracking_number ) . '</p>';
    
    if ( $tracking_url ) {
        echo '<a href="' . esc_url( $tracking_url ) . '" style="display: inline-block; margin-top: 10px; padding: 10px 20px; background-color: #27ae60; color: #fff; text-decoration: none; border-radius: 4px;">Kargonuzu Takip Edin</a>';
    }
    
    echo '</div>';
}

Dikkat Etmeniz Gereken Noktalar

Kod yazarken sıkça yapılan hatalar ve bunlardan nasıl kaçınacağınız:

  • Güvenlik: echo ile HTML çıktısı verirken mutlaka esc_html(), esc_url(), esc_attr() fonksiyonlarını kullanın. Kullanıcı verisi her zaman tehlikelidir.
  • Plain text versiyonu: WooCommerce her e-postanın hem HTML hem plain text versiyonunu oluşturur. $plain_text parametresini kontrol etmeyi unutmayın.
  • $sent_to_admin kontrolü: Yöneticiye gönderilen kopyada müşteriye özel içerik olmamalı. Bu parametreyi kontrol edin.
  • E-posta ID kontrolü: Hook’larınız tüm WooCommerce e-postalarını tetikler. $email->id kontrolü yapmazsanız yanlış e-postalarda da içeriğiniz görünür.
  • Test yapın: WooCommerce’de “E-posta önizleme” özelliği var ama gerçek bir test siparişi oluşturmak çok daha güvenilir sonuç verir. Mailhog veya WP Mail SMTP eklentisinin test özelliğini kullanabilirsiniz.
  • Çocuk tema kullanın: Tüm bu kodları ana temanın functions.php dosyasına yazmayın. Tema güncellendiğinde her şeyi kaybedersiniz.

Sonuç

WooCommerce sipariş tamamlanma e-postasını özelleştirmek göründüğü kadar zor değil. Hook sistemi son derece esnek ve güçlü. Yukarıdaki örnekleri kendi ihtiyacınıza göre uyarlayarak birkaç dakika içinde profesyonel görünen, kişiselleştirilmiş e-postalar oluşturabilirsiniz.

Önem sırasına göre yapmanız gerekenleri şöyle özetleyebilirim: Önce konu satırını kişiselleştirin çünkü bu açılma oranınızı doğrudan etkiler. Sonra müşteriye özel bir teşekkür mesajı ekleyin. Ardından kupon kodu veya kargo takip gibi değer katan bilgileri entegre edin. Son olarak da görsel tasarımı markanızla uyumlu hale getirin.

Bu adımları doğru uyguladığınızda müşterileriniz siparişlerinden sonra aldıkları e-postayı silmek yerine saklayacaklar. Çünkü içinde işlerine yarayacak bir şey var.

Bir yanıt yazın

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