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

如何针对特定配送方式禁用WooCommerce订单完成邮件通知

实现WooCommerce自提订单禁用完成邮件通知

需求:仅当客户选择配送方式「Retirada no local」(自提)时,禁用WooCommerce的订单完成邮件通知。

你找到的参考代码针对的是「新订单邮件」,且逻辑是仅保留指定配送方式的邮件,和需求逻辑相反。我们可以基于这个思路修改,针对「订单完成邮件」的收件人过滤器,实现当配送方式为「Retirada no local」时清空收件人,从而禁用该邮件。

以下是修改后的代码:

function disable_completion_email_for_local_pickup( $recipient, $order = false ) {   
    // 校验订单对象是否有效
    if ( ! $order || ! is_a( $order, 'WC_Order' ) ) {
        return $recipient;
    }
    
    // 获取订单的配送方式显示名称
    $shipping_method = $order->get_shipping_method();

    // 当配送方式匹配「Retirada no local」时,清空收件人以禁用邮件
    if ( $shipping_method === 'Retirada no local' ) {
        $recipient = '';
    }

    return $recipient;
}
// 针对客户订单完成邮件添加过滤器,优先级10,接受2个参数
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'disable_completion_email_for_local_pickup', 10, 2 );

代码说明:

  • 使用woocommerce_email_recipient_customer_completed_order钩子,这是WooCommerce专门控制客户订单完成邮件收件人的过滤器
  • 核心逻辑:当配送方式匹配目标名称时,将收件人设为空字符串,WooCommerce会因无收件人停止发送该邮件
  • 保留订单对象有效性校验,避免触发错误

如果你的自提配送方式后台slug(如local_pickup)和前台显示名称不一致,可改用以下基于slug判断的代码,适配性更强:

function disable_completion_email_for_local_pickup( $recipient, $order = false ) {   
    if ( ! $order || ! is_a( $order, 'WC_Order' ) ) {
        return $recipient;
    }
    
    // 遍历订单的配送方式,匹配目标slug
    foreach ( $order->get_shipping_methods() as $shipping_method ) {
        if ( $shipping_method->get_method_id() === 'local_pickup' ) { // 替换为你的自提方式slug
            $recipient = '';
            break;
        }
    }

    return $recipient;
}
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'disable_completion_email_for_local_pickup', 10, 2 );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:25