You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:08