我的网上商店安装了 WooCommerce 8.0.3。简而言之,假设我有一个 ID 为 123、状态为
processing
的订单。在特定情况下,我运行此代码:
// Make sure e-mails are initialized.
WC()->mailer();
// Set order status to completed.
$order = wc_get_order( 123 );
$order->update_status( "completed", "", true );
我需要发送一封
customer_completed_order
电子邮件。有时它有效,但有时则无效。我在 WooCommerce 管理员中启用了电子邮件。
我发现
woocommerce_order_status_completed_notification
钩子上触发了一封电子邮件,所以我尝试修改代码:
WC()->mailer();
$order = wc_get_order( 123 );
$order->update_status( "completed", "", true );
var_dump( did_action( "woocommerce_order_status_completed" ) );
var_dump( did_action( "woocommerce_order_status_completed_notification" ) );
结果:
int(1)
int(0)
这意味着
woocommerce_order_status_completed
钩子已执行,但 woocommerce_order_status_completed_notification
未执行。
我的问题是:
woocommerce_order_status_completed_notification
这样的钩子?woocommerce_order_status_completed_notification
执行时,钩子 woocommerce_order_status_completed
没有执行,可能是什么原因?如有任何帮助,我们将不胜感激。
挂钩
woocommerce_order_status_completed_notification
是一个多复合挂钩,允许在订单状态更改为“已完成”时触发发送给客户的电子邮件。
WC_Emails
send_transactional_email()
方法中触发:
do_action_ref_array( current_filter() . '_notification', $args );
其中
current_filter()
指的是woocommerce_email_actions
过滤器挂钩参数:
array(
'woocommerce_low_stock',
'woocommerce_no_stock',
'woocommerce_product_on_backorder',
'woocommerce_order_status_pending_to_processing',
'woocommerce_order_status_pending_to_completed',
'woocommerce_order_status_processing_to_cancelled',
'woocommerce_order_status_pending_to_failed',
'woocommerce_order_status_pending_to_on-hold',
'woocommerce_order_status_failed_to_processing',
'woocommerce_order_status_failed_to_completed',
'woocommerce_order_status_failed_to_on-hold',
'woocommerce_order_status_cancelled_to_processing',
'woocommerce_order_status_cancelled_to_completed',
'woocommerce_order_status_cancelled_to_on-hold',
'woocommerce_order_status_on-hold_to_processing',
'woocommerce_order_status_on-hold_to_cancelled',
'woocommerce_order_status_on-hold_to_failed',
'woocommerce_order_status_completed', // <=== <=== <=== HERE
'woocommerce_order_fully_refunded',
'woocommerce_order_partially_refunded',
'woocommerce_new_customer_note',
'woocommerce_created_customer',
)
钩子钩在构造函数第42行的
WC_Email_Customer_Completed_Order
中,对于WC_Email_Customer_Completed_Order
方法trigger()
:
// Triggers for this email.
add_action( 'woocommerce_order_status_completed_notification', array( $this, 'trigger' ), 10, 2 );
因此 您只能将此钩子与
remove_action()
如代码片段所示一起使用,以删除当订单状态为“已完成”时发送给客户的电子邮件通知。
请注意,
WC()->mailer()
只是WC_Emails
类的实例对象,用于加载邮件程序类,类似于new WC_Emails()
。