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

基于配送方式ID触发订单处理额外邮件通知的问题求助

解决Woocommerce按配送方式ID添加额外邮件收件人问题

你的问题核心在于原钩子仅针对「新订单通知」(new_order),如果需要针对「订单处理中通知」(customer_processing_order)或其他邮件类型生效,需要使用支持$email_id参数的动态钩子,同时确保配送方式ID的获取逻辑准确。

修改后的代码

add_filter( 'woocommerce_email_recipient_new_order', 'add_recipients_by_shipping_method', 20, 3 );
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'add_recipients_by_shipping_method', 20, 3 );

function add_recipients_by_shipping_method( $recipient, $order, $email ) {
    // 验证订单对象和邮件对象
    if ( ! is_a( $order, 'WC_Order' ) || ! is_a( $email, 'WC_Email' ) ) {
        return $recipient;
    }

    // 配置收件邮箱和对应配送方式ID
    $shipping_recipients = [
        'flat_rate:8' => 'name1@domain.com',
        'flat_rate:9' => 'name2@domain.com'
    ];

    // 获取订单的配送方式ID
    $shipping_method_id = '';
    foreach ( $order->get_items('shipping') as $shipping_item ) {
        $shipping_method_id = $shipping_item->get_method_id() . ':' . $shipping_item->get_instance_id();
        break; // 取第一个配送方式(一般订单仅一个)
    }

    // 如果匹配到对应配送方式,添加收件人
    if ( isset( $shipping_recipients[$shipping_method_id] ) ) {
        // 避免重复添加
        if ( strpos( $recipient, $shipping_recipients[$shipping_method_id] ) === false ) {
            $recipient .= ',' . $shipping_recipients[$shipping_method_id];
        }
    }

    return $recipient;
}

关键修改说明

  1. 多邮件类型支持:同时挂钩new_order和customer_processing_order两个邮件通知,你可以根据需求添加或移除其他邮件类型(如customer_completed_order)。
  2. 参数完整性:钩子的第三个参数是$email对象,通过它可以精准判断邮件类型(比如$email->id可获取邮件ID)。
  3. 配送方式ID验证:使用循环获取配送方式ID,兼容极端情况下的多配送方式场景,同时避免原代码中reset()可能导致的空值问题。
  4. 重复收件人防护:通过strpos检查收件人是否已存在,避免重复添加。

调试技巧

如果仍未生效,先确认配送方式ID是否正确:

  • 在订单详情页添加临时代码打印ID:
    add_action( 'woocommerce_admin_order_data_after_shipping_address', 'print_shipping_method_id', 10, 1 );
    function print_shipping_method_id( $order ) {
        foreach ( $order->get_items('shipping') as $shipping_item ) {
            echo '<p><strong>配送方式ID:</strong>' . $shipping_item->get_method_id() . ':' . $shipping_item->get_instance_id() . '</p>';
        }
    }
    
  • 登录后台查看订单详情页的配送地址下方,即可看到实际的配送方式ID,确保代码中的ID与实际一致。

内容的提问来源于stack exchange,提问作者avidart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:13:17