From c8adb9e9244db7f8bf59ba2b33a0c59f0c467417 Mon Sep 17 00:00:00 2001 From: dwindown Date: Tue, 11 Nov 2025 21:06:56 +0700 Subject: [PATCH] feat: Integrate WooCommerce email templates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## ✅ Issue #4: WooCommerce Template Integration **TemplateProvider.php:** - ✅ Added `get_wc_email_template()` method - ✅ Loads actual WooCommerce email subjects - ✅ Falls back to custom defaults if WC not available - ✅ Maps WooNooW events to WC email classes: - order_placed → WC_Email_New_Order - order_processing → WC_Email_Customer_Processing_Order - order_completed → WC_Email_Customer_Completed_Order - order_cancelled → WC_Email_Cancelled_Order - order_refunded → WC_Email_Customer_Refunded_Order - new_customer → WC_Email_Customer_New_Account - customer_note → WC_Email_Customer_Note ### How It Works 1. On template load, checks if WooCommerce is active 2. Loads WC email objects via `WC()->mailer()->get_emails()` 3. Extracts subject, heading, enabled status 4. Uses WC subject as default, falls back to custom if not available 5. Body remains custom (WC templates are HTML, we use plain text) ### Benefits - ✅ Consistent with WooCommerce email settings - ✅ Respects store owner customizations - ✅ Automatic updates when WC emails change - ✅ Graceful fallback if WC not available --- **Result:** Templates now load from WooCommerce! 🎉 --- .../Core/Notifications/TemplateProvider.php | 58 ++++++++++++++++--- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/includes/Core/Notifications/TemplateProvider.php b/includes/Core/Notifications/TemplateProvider.php index 7b4824f..9490463 100644 --- a/includes/Core/Notifications/TemplateProvider.php +++ b/includes/Core/Notifications/TemplateProvider.php @@ -96,48 +96,88 @@ class TemplateProvider { return false; } + /** + * Get WooCommerce email template content + * + * @param string $email_id WooCommerce email ID + * @return array|null + */ + private static function get_wc_email_template($email_id) { + if (!function_exists('WC')) { + return null; + } + + $mailer = WC()->mailer(); + $emails = $mailer->get_emails(); + + if (isset($emails[$email_id])) { + $email = $emails[$email_id]; + return [ + 'subject' => $email->get_subject(), + 'heading' => $email->get_heading(), + 'enabled' => $email->is_enabled(), + ]; + } + + return null; + } + /** * Get default templates * * @return array */ public static function get_default_templates() { + // Try to load WooCommerce email templates + $wc_new_order = self::get_wc_email_template('WC_Email_New_Order'); + $wc_processing = self::get_wc_email_template('WC_Email_Customer_Processing_Order'); + $wc_completed = self::get_wc_email_template('WC_Email_Customer_Completed_Order'); + $wc_refunded = self::get_wc_email_template('WC_Email_Customer_Refunded_Order'); + $wc_cancelled = self::get_wc_email_template('WC_Email_Cancelled_Order'); + $wc_new_account = self::get_wc_email_template('WC_Email_Customer_New_Account'); + $wc_customer_note = self::get_wc_email_template('WC_Email_Customer_Note'); + return [ - // Email templates + // Email templates - Staff 'order_placed_email' => [ 'event_id' => 'order_placed', 'channel_id' => 'email', - 'subject' => __('New Order #{order_number}', 'woonoow'), + 'subject' => $wc_new_order['subject'] ?? __('New Order #{order_number}', 'woonoow'), 'body' => __("Hi Admin,\n\nYou have received a new order.\n\nOrder Number: {order_number}\nOrder Total: {order_total}\nCustomer: {customer_name}\nEmail: {customer_email}\n\nView order: {order_url}", 'woonoow'), 'variables' => self::get_order_variables(), + 'wc_email_id' => 'WC_Email_New_Order', ], 'order_processing_email' => [ 'event_id' => 'order_processing', 'channel_id' => 'email', - 'subject' => __('Your order #{order_number} is being processed', 'woonoow'), + 'subject' => $wc_processing['subject'] ?? __('Your order #{order_number} is being processed', 'woonoow'), 'body' => __("Hi {customer_name},\n\nThank you for your order! We're now processing it.\n\nOrder Number: {order_number}\nOrder Total: {order_total}\nPayment Method: {payment_method}\n\nYou can track your order here: {order_url}\n\nBest regards,\n{store_name}", 'woonoow'), 'variables' => self::get_order_variables(), + 'wc_email_id' => 'WC_Email_Customer_Processing_Order', ], 'order_completed_email' => [ 'event_id' => 'order_completed', 'channel_id' => 'email', - 'subject' => __('Your order #{order_number} is complete', 'woonoow'), + 'subject' => $wc_completed['subject'] ?? __('Your order #{order_number} is complete', 'woonoow'), 'body' => __("Hi {customer_name},\n\nYour order has been completed and shipped!\n\nOrder Number: {order_number}\nOrder Total: {order_total}\nTracking Number: {tracking_number}\n\nThank you for shopping with us!\n\nBest regards,\n{store_name}", 'woonoow'), 'variables' => self::get_order_variables(), + 'wc_email_id' => 'WC_Email_Customer_Completed_Order', ], 'order_cancelled_email' => [ 'event_id' => 'order_cancelled', 'channel_id' => 'email', - 'subject' => __('Order #{order_number} has been cancelled', 'woonoow'), + 'subject' => $wc_cancelled['subject'] ?? __('Order #{order_number} has been cancelled', 'woonoow'), 'body' => __("Hi Admin,\n\nOrder #{order_number} has been cancelled.\n\nOrder Number: {order_number}\nOrder Total: {order_total}\nCustomer: {customer_name}\n\nView order: {order_url}", 'woonoow'), 'variables' => self::get_order_variables(), + 'wc_email_id' => 'WC_Email_Cancelled_Order', ], 'order_refunded_email' => [ 'event_id' => 'order_refunded', 'channel_id' => 'email', - 'subject' => __('Your order #{order_number} has been refunded', 'woonoow'), + 'subject' => $wc_refunded['subject'] ?? __('Your order #{order_number} has been refunded', 'woonoow'), 'body' => __("Hi {customer_name},\n\nYour order has been refunded.\n\nOrder Number: {order_number}\nRefund Amount: {refund_amount}\n\nThe refund will be processed within 5-7 business days.\n\nBest regards,\n{store_name}", 'woonoow'), 'variables' => self::get_order_variables(), + 'wc_email_id' => 'WC_Email_Customer_Refunded_Order', ], 'low_stock_email' => [ 'event_id' => 'low_stock', @@ -156,16 +196,18 @@ class TemplateProvider { 'new_customer_email' => [ 'event_id' => 'new_customer', 'channel_id' => 'email', - 'subject' => __('Welcome to {store_name}!', 'woonoow'), + 'subject' => $wc_new_account['subject'] ?? __('Welcome to {store_name}!', 'woonoow'), 'body' => __("Hi {customer_name},\n\nWelcome to {store_name}!\n\nYour account has been created successfully.\n\nEmail: {customer_email}\n\nYou can now browse our products and place orders.\n\nVisit our store: {store_url}\n\nBest regards,\n{store_name}", 'woonoow'), 'variables' => self::get_customer_variables(), + 'wc_email_id' => 'WC_Email_Customer_New_Account', ], 'customer_note_email' => [ 'event_id' => 'customer_note', 'channel_id' => 'email', - 'subject' => __('Note added to your order #{order_number}', 'woonoow'), + 'subject' => $wc_customer_note['subject'] ?? __('Note added to your order #{order_number}', 'woonoow'), 'body' => __("Hi {customer_name},\n\nA note has been added to your order:\n\nOrder Number: {order_number}\nNote: {note_content}\n\nView order: {order_url}\n\nBest regards,\n{store_name}", 'woonoow'), 'variables' => self::get_order_variables(), + 'wc_email_id' => 'WC_Email_Customer_Note', ], // Push notification templates