feat: Integrate WooCommerce email templates

##  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! 🎉
This commit is contained in:
dwindown
2025-11-11 21:06:56 +07:00
parent a42ae0d689
commit c8adb9e924

View File

@@ -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