feat: Add all WooCommerce order status events

Added missing order status events that were not showing in admin UI.

New Events Added (Staff + Customer):
- Order On-Hold (awaiting payment)
- Order Failed (payment/processing failed)
- Order Refunded (full refund processed)
- Order Pending (initial order state)

Changes:
1. EventRegistry.php - Added 8 new event definitions
2. DefaultTemplates.php - Added 8 new email templates
3. DefaultTemplates.php - Added subject lines for all new events

Now Available in Admin:
- Staff: 11 order events total
- Customer: 12 events total (including new customer)

All events can be toggled on/off per channel (email/push) in admin UI.
This commit is contained in:
dwindown
2025-11-18 23:10:46 +07:00
parent 88de190df4
commit d3e36688cd
2 changed files with 311 additions and 0 deletions

View File

@@ -97,6 +97,42 @@ class EventRegistry {
'wc_email' => '', 'wc_email' => '',
'enabled' => true, 'enabled' => true,
], ],
'order_on_hold' => [
'id' => 'order_on_hold',
'label' => __('Order On-Hold', 'woonoow'),
'description' => __('When order is awaiting payment', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'staff',
'wc_email' => '',
'enabled' => true,
],
'order_failed' => [
'id' => 'order_failed',
'label' => __('Order Failed', 'woonoow'),
'description' => __('When order fails', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'staff',
'wc_email' => 'failed_order',
'enabled' => true,
],
'order_refunded' => [
'id' => 'order_refunded',
'label' => __('Order Refunded', 'woonoow'),
'description' => __('When order is refunded', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'staff',
'wc_email' => '',
'enabled' => true,
],
'order_pending' => [
'id' => 'order_pending',
'label' => __('Order Pending', 'woonoow'),
'description' => __('When order is created (pending payment)', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'staff',
'wc_email' => '',
'enabled' => true,
],
// CUSTOMER EVENTS // CUSTOMER EVENTS
'order_placed_customer' => [ 'order_placed_customer' => [
@@ -171,6 +207,42 @@ class EventRegistry {
'wc_email' => 'customer_new_account', 'wc_email' => 'customer_new_account',
'enabled' => true, 'enabled' => true,
], ],
'order_on_hold_customer' => [
'id' => 'order_on_hold',
'label' => __('Order On-Hold', 'woonoow'),
'description' => __('When order is awaiting payment', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'customer',
'wc_email' => 'customer_on_hold_order',
'enabled' => true,
],
'order_failed_customer' => [
'id' => 'order_failed',
'label' => __('Order Failed', 'woonoow'),
'description' => __('When order fails', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'customer',
'wc_email' => 'customer_failed_order',
'enabled' => true,
],
'order_refunded_customer' => [
'id' => 'order_refunded',
'label' => __('Order Refunded', 'woonoow'),
'description' => __('When order is refunded', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'customer',
'wc_email' => 'customer_refunded_order',
'enabled' => true,
],
'order_pending_customer' => [
'id' => 'order_pending',
'label' => __('Order Pending', 'woonoow'),
'description' => __('When order is created (pending payment)', 'woonoow'),
'category' => 'orders',
'recipient_type' => 'customer',
'wc_email' => '',
'enabled' => true,
],
]; ];
/** /**

View File

@@ -37,6 +37,10 @@ class DefaultTemplates {
'order_shipped' => self::customer_order_shipped(), 'order_shipped' => self::customer_order_shipped(),
'order_completed' => self::customer_order_completed(), 'order_completed' => self::customer_order_completed(),
'order_cancelled' => self::customer_order_cancelled(), 'order_cancelled' => self::customer_order_cancelled(),
'order_on_hold' => self::customer_order_on_hold(),
'order_failed' => self::customer_order_failed(),
'order_refunded' => self::customer_order_refunded(),
'order_pending' => self::customer_order_pending(),
'payment_received' => self::customer_payment_received(), 'payment_received' => self::customer_payment_received(),
'payment_failed' => self::customer_payment_failed(), 'payment_failed' => self::customer_payment_failed(),
'new_customer' => self::customer_new_customer(), 'new_customer' => self::customer_new_customer(),
@@ -47,6 +51,10 @@ class DefaultTemplates {
'order_shipped' => self::staff_order_shipped(), 'order_shipped' => self::staff_order_shipped(),
'order_completed' => self::staff_order_completed(), 'order_completed' => self::staff_order_completed(),
'order_cancelled' => self::staff_order_cancelled(), 'order_cancelled' => self::staff_order_cancelled(),
'order_on_hold' => self::staff_order_on_hold(),
'order_failed' => self::staff_order_failed(),
'order_refunded' => self::staff_order_refunded(),
'order_pending' => self::staff_order_pending(),
'payment_received' => self::staff_payment_received(), 'payment_received' => self::staff_payment_received(),
'payment_failed' => self::staff_payment_failed(), 'payment_failed' => self::staff_payment_failed(),
], ],
@@ -77,6 +85,10 @@ class DefaultTemplates {
'order_shipped' => 'Your order #{order_number} is on its way', 'order_shipped' => 'Your order #{order_number} is on its way',
'order_completed' => 'Your order #{order_number} has arrived', 'order_completed' => 'Your order #{order_number} has arrived',
'order_cancelled' => 'Your order #{order_number} has been cancelled', 'order_cancelled' => 'Your order #{order_number} has been cancelled',
'order_on_hold' => 'Your order #{order_number} is on hold',
'order_failed' => 'Your order #{order_number} has failed',
'order_refunded' => 'Your order #{order_number} has been refunded',
'order_pending' => 'Your order #{order_number} is pending',
'payment_received' => 'Payment confirmed for order #{order_number}', 'payment_received' => 'Payment confirmed for order #{order_number}',
'payment_failed' => 'Payment failed for order #{order_number}', 'payment_failed' => 'Payment failed for order #{order_number}',
'new_customer' => 'Welcome to {site_name}!', 'new_customer' => 'Welcome to {site_name}!',
@@ -87,6 +99,10 @@ class DefaultTemplates {
'order_shipped' => '[Order Shipped] #{order_number}', 'order_shipped' => '[Order Shipped] #{order_number}',
'order_completed' => '[Order Completed] #{order_number}', 'order_completed' => '[Order Completed] #{order_number}',
'order_cancelled' => '[Order Cancelled] #{order_number}', 'order_cancelled' => '[Order Cancelled] #{order_number}',
'order_on_hold' => '[Order On-Hold] #{order_number}',
'order_failed' => '[Order Failed] #{order_number}',
'order_refunded' => '[Order Refunded] #{order_number}',
'order_pending' => '[Order Pending] #{order_number}',
'payment_received' => '[Payment Received] #{order_number} - {order_total}', 'payment_received' => '[Payment Received] #{order_number} - {order_total}',
'payment_failed' => '[Payment Failed] #{order_number}', 'payment_failed' => '[Payment Failed] #{order_number}',
], ],
@@ -788,4 +804,227 @@ Order is reserved but will be cancelled automatically if payment is not received
[/card]'; [/card]';
} }
// ========================================================================
// ADDITIONAL ORDER STATUS TEMPLATES
// ========================================================================
/**
* Customer: Order On-Hold
*/
private static function customer_order_on_hold() {
return '[card type="info"]
## Your order is on hold
Your order #{order_number} is awaiting payment confirmation.
[/card]
[card]
**Order Number:** #{order_number}
**Order Total:** {order_total}
**Payment Method:** {payment_method}
[/card]
[button url="{payment_retry_url}"]Complete Payment[/button]
[card]
Questions? Contact us: {support_email}
[/card]';
}
/**
* Customer: Order Failed
*/
private static function customer_order_failed() {
return '[card type="warning"]
## Order #{order_number} has failed
Unfortunately, your order could not be processed.
[/card]
[card]
**Order Number:** #{order_number}
**Order Total:** {order_total}
**Reason:** Payment could not be processed
[/card]
[button url="{shop_url}"]Continue Shopping[/button]
[card]
Need help? Contact: {support_email}
[/card]';
}
/**
* Customer: Order Refunded
*/
private static function customer_order_refunded() {
return '[card type="success"]
## Your order #{order_number} has been refunded
Your refund has been processed successfully.
[/card]
[card]
**Order Number:** #{order_number}
**Refund Amount:** {order_total}
**Refund Date:** {order_date}
[/card]
[card type="info"]
The refund will appear in your account within 5-10 business days depending on your payment provider.
[/card]
[card]
Questions? Contact: {support_email}
[/card]';
}
/**
* Customer: Order Pending
*/
private static function customer_order_pending() {
return '[card type="info"]
## Thank you for your order!
Your order #{order_number} is pending and will be processed once payment is confirmed.
[/card]
[card]
**Order Number:** #{order_number}
**Order Total:** {order_total}
**Payment Method:** {payment_method}
[/card]
[card]
{order_items_table}
[/card]
[button url="{order_url}"]View Order[/button]
[card]
Questions? Contact: {support_email}
[/card]';
}
/**
* Staff: Order On-Hold
*/
private static function staff_order_on_hold() {
return '[card type="info"]
## Order #{order_number} is on hold
Awaiting payment confirmation from {customer_name}.
[/card]
[card]
**Order Number:** #{order_number}
**Customer:** {customer_name}
**Order Total:** {order_total}
**Payment Method:** {payment_method}
[/card]
[button url="{order_url}"]View Order[/button]';
}
/**
* Staff: Order Failed
*/
private static function staff_order_failed() {
return '[card type="warning"]
## Order #{order_number} has failed
Order from {customer_name} could not be processed.
[/card]
[card]
**Order Number:** #{order_number}
**Customer:** {customer_name}
**Order Total:** {order_total}
[/card]
[button url="{order_url}"]View Details[/button]';
}
/**
* Staff: Order Refunded
*/
private static function staff_order_refunded() {
return '[card type="success"]
## Order #{order_number} has been refunded
Refund processed for {customer_name}.
[/card]
[card]
**Order Number:** #{order_number}
**Customer:** {customer_name}
**Refund Amount:** {order_total}
[/card]
[button url="{order_url}"]View Order[/button]';
}
/**
* Staff: Order Pending
*/
private static function staff_order_pending() {
return '[card type="info"]
## New pending order #{order_number}
Order from {customer_name} is pending payment.
[/card]
[card]
**Order Number:** #{order_number}
**Customer:** {customer_name}
**Order Total:** {order_total}
[/card]
[button url="{order_url}"]View Order[/button]';
}
} }