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

WooCommerce新订单额外邮件无法获取指定详情问题求助

WooCommerce 自定义额外新订单邮件(正确获取订单详情)

你的核心问题是原代码使用的woocommerce_new_order钩子触发时机过早,部分订单数据尚未完全写入数据库,导致无法正确获取所需详情。以下是修正后的代码,确保能稳定获取不含价格的商品明细、客户备注、订单编号和订单日期,同时保留默认新订单邮件功能:

add_action( 'woocommerce_checkout_order_processed', 'send_custom_order_email', 10, 3 );
function send_custom_order_email( $order_id, $posted_data, $order ) {
    // 直接使用钩子传递的order对象,避免重复查询
    if ( ! $order ) {
        $order = wc_get_order( $order_id );
    }

    // 构建商品明细(不含价格)
    $order_details = '';
    foreach ( $order->get_items() as $item ) {
        $product_name = $item->get_name();
        $item_quantity = $item->get_quantity();
        $order_details .= "商品:{$product_name} - 数量:{$item_quantity}\n";
    }

    // 处理订单日期(兼容空值情况)
    $order_date = $order->get_date_created() 
        ? $order->get_date_created()->format( 'Y年m月d日 H:i:s' ) 
        : date( 'Y年m月d日 H:i:s' );

    // 处理客户备注(空值时显示“无”)
    $customer_note = $order->get_customer_note() ?: '无';

    // 组装邮件内容
    $email_content = "订单日期:{$order_date}\n"
                   . "订单编号:{$order->get_order_number()}\n\n"
                   . "商品明细:\n{$order_details}\n"
                   . "客户备注:{$customer_note}";

    // 邮件主题与收件人
    $email_subject = "新订单通知:{$order->get_order_number()}";
    $desired_email = 'your-target-email@example.com'; // 替换为目标邮箱

    // 发送邮件
    wp_mail( $desired_email, $email_subject, $email_content );
}

关键修改说明:

  • 钩子替换:改用woocommerce_checkout_order_processed,该钩子在订单数据完全写入数据库后触发,确保能获取完整的订单信息
  • 数据获取优化:使用WooCommerce官方推荐的方法(如$item->get_name()、$item->get_quantity())替代直接访问数组属性,兼容高版本WooCommerce
  • 空值处理:对订单日期、客户备注增加空值判断,避免邮件内容出现异常
  • 直接使用订单对象:利用钩子传递的$order参数,减少数据库查询,提升效率

将上述代码添加到你的WordPress主题functions.php文件或自定义插件中即可生效,默认新订单邮件功能不受任何影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:37:15