WooCommerce发送订单处理邮件时如何调用自定义函数?
WooCommerce 触发自定义函数方案
以下两种方案均可实现「订单进入处理状态、对应通知邮件发送完成后执行自定义函数」的需求:
方案1:调整状态转换钩子优先级(适用于大多数场景)
WooCommerce 默认将「发送订单处理状态通知邮件」的动作挂载在 woocommerce_order_status_processing 钩子上,默认优先级为 10。你只需将自定义函数挂载到同一个钩子,设置优先级大于 10,即可保证邮件发送完成后再执行自定义逻辑。
示例代码:
// 你的自定义业务逻辑函数 function custom_action_after_processing_email( $order_id, $order ) { // 此处写入你需要执行的自定义代码 // 示例:获取订单基础信息 $order_total = $order->get_total(); $customer_email = $order->get_billing_email(); } // 优先级设为20,高于邮件发送的默认优先级,确保执行顺序 add_action( 'woocommerce_order_status_processing', 'custom_action_after_processing_email', 20, 2 );
方案2:监听邮件发送钩子(严格校验邮件发送成功后触发)
如果你的业务逻辑要求必须在邮件发送成功后才执行,可以使用 woocommerce_email_sent 钩子,通过判断邮件类型精准触发:
示例代码:
function custom_action_after_processing_email_sent( $email, $send_status, $error ) { // 仅当客户的订单处理通知邮件发送成功时执行 // 如果需要监听管理员收到的新订单通知,将 customer_processing_order 替换为 new_order if ( $email->id === 'customer_processing_order' && $send_status ) { $order = $email->object; $order_id = $order->get_id(); // 此处写入你需要执行的自定义代码 } } add_action( 'woocommerce_email_sent', 'custom_action_after_processing_email_sent', 10, 3 );
测试验证方法
你可以在自定义函数中加入日志代码,测试触发时机是否符合预期:
// 日志可在 WordPress 后台 > WooCommerce > 状态 > 日志 中查看 wc_get_logger()->info( '自定义函数触发,订单ID:' . $order_id, [ 'source' => 'custom-hook-test' ] );
注意:以上代码需要添加到你当前使用的主题的
functions.php文件中,或者自定义插件的代码文件中。
内容的提问来源于stack exchange,提问作者Proging 55
相关产品推荐
相关产品推荐

