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

WooCommerce特定品类订单完成时触发邮件代码求助

问题排查与代码修复

嘿,我帮你梳理下代码里的几个关键问题,应该能解决你的订单完成自动发邮件需求:

1. 钩子使用错误,导致代码从未触发

你用了woocommerce_catmail这个自定义钩子,但WooCommerce不会自动触发它。应该替换为官方提供的订单完成触发钩子:woocommerce_order_status_completed,这样订单状态变为“已完成”时,你的函数才会执行。

2. 循环变量与字段调用混乱

  • 你在foreach里把订单项命名为$orderid,但后面又用了$item['product_id'],变量名完全不匹配,得统一用$item;
  • 订单项对象里没有直接的product_cat属性,不能直接通过$orderid['product_cat']获取分类ID,必须先拿到产品对象,再检查分类归属。

3. 产品获取函数已过时

get_product()是WooCommerce旧版本的函数,现在已经被弃用,应该用wc_get_product()来获取产品对象。

4. 缺少核心的邮件发送代码

你只定义了收件人和头信息,但没有调用wp_mail()来实际发送邮件,等于只搭了架子没启动流程。

修复后的完整代码

// 替换为订单完成的官方触发钩子
add_action( 'woocommerce_order_status_completed', 'send_email_for_category_630', 10, 1 );

function send_email_for_category_630( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) return; // 确保订单对象有效,避免报错

    $has_target_category = false;
    // 遍历订单内所有商品项
    foreach( $order->get_items() as $item ) {
        $product_id = $item->get_product_id();
        $product = wc_get_product( $product_id );
        
        if ( ! $product ) continue;

        // 检查当前商品是否属于ID为630的分类
        if ( has_term( 630, 'product_cat', $product_id ) ) {
            $has_target_category = true;
            break; // 找到目标商品就停止循环,避免重复检查
        }
    }

    // 确认存在目标分类商品后,发送邮件
    if ( $has_target_category ) {
        $to_email = $order->get_billing_email();
        $subject = '您的订单包含特定品类商品';
        $message = '感谢您的订单!您购买的商品中包含我们的特定品类商品,如有疑问可随时联系我们。'; // 自定义邮件内容
        $headers = array( 'From: 你的商店名称 <your-shop-email@example.com>' ); // 完善发件人信息

        // 执行邮件发送
        wp_mail( $to_email, $subject, $message, $headers );
    }
}

额外说明

  • 我加了$has_target_category变量,确保只要订单里有一个符合条件的商品就只发一次邮件,避免重复发送;
  • 用has_term()函数检查产品分类,这是WooCommerce官方推荐的标准方式;
  • 补充了订单和产品对象的有效性检查,避免出现PHP警告或错误;
  • 邮件的主题、内容和发件人信息你可以根据自己的需求修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:26:29