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

WooCommerce订单元数据无法读取,自定义邮件文本添加失败求助

解决WooCommerce订单元数据无法在邮件中获取的问题

问题根源

  1. 钩子执行时机滞后:你使用的woocommerce_thankyou钩子在用户进入订单感谢页面时才触发,而WooCommerce的邮件通知(比如new_order)可能在这之前就已发送,导致邮件触发时approval_required元数据还未写入订单。
  2. 元数据获取方式过时:新版WooCommerce中,直接调用get_post_meta($order->id)的方式已不推荐,且$order->id属性已被废弃,应使用订单对象的get_meta()方法获取自定义元数据。

修正代码

// 替换钩子,在订单创建时写入元数据
add_action('woocommerce_checkout_update_order_meta', 'assign_approver_to_order');
function assign_approver_to_order($order_id){
    $user_id = get_current_user_id();
    $company_id = get_user_meta($user_id, 'parent', true);

    if($company_id){
        // 用WooCommerce官方方法写入元数据,更规范
        $order = wc_get_order($order_id);
        $order->update_meta_data('approval_required', 'yes');
        $order->save();
    }   
}

// 修改邮件中的元数据获取逻辑
add_action( 'woocommerce_email_order_details', 'custom_text_in_customer_new_order_email', 999, 4 );
function custom_text_in_customer_new_order_email( $order, $sent_to_admin, $plain_text, $email ) {
    // 使用订单对象的get_meta方法获取元数据
    $order_approval = $order->get_meta('approval_required');
    
    if( $order_approval == "yes" ) {
        switch($email->id){
            case "new_order":
                $custom_txt = "<b>This order is waiting for approval.</b><br>";
                echo  $custom_txt;
                break;
            case "customer_on_hold_order":
                $custom_txt = "<b>Your order is waiting for approval.</b><br>";
                echo  $custom_txt;
                break;
        }
    }
}

关键说明

  • 钩子替换:woocommerce_checkout_update_order_meta在订单完成结账流程、数据写入数据库时触发,时机早于邮件发送,确保元数据在邮件触发前已存在。
  • 元数据操作:使用$order->update_meta_data()和$order->get_meta()是WooCommerce官方推荐的方式,能自动兼容不同版本的存储逻辑,避免直接操作数据库的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:05:11