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

在WooCommerce订单接收页和通知邮件中显示自定义订单元数据

修复方案:在WooCommerce订单接收页显示产品自定义元数据

问题根源

你的代码核心错误在于:从订单对象而非产品/订单项对象获取元数据,同时存在按商品数量重复输出的冗余逻辑,且未做安全输出处理。

修复后的代码

// 在订单接收(感谢)页面显示产品自定义元数据
public function display_order_product_custom_meta( $order_id ) {
    // 定义字段键与对应显示标签(可根据需求修改标签文字)
    $fields = array(  
        'selected_pdv'   => '自提点',
        'selected_date'  => '选择日期',
        'selected_hour'  => '选择时段'
    );
    
    $order = wc_get_order( $order_id );
    if ( ! $order ) return;

    // 遍历每个订单项
    foreach ( $order->get_items() as $item_id => $item ) {
        // 获取订单项关联的产品对象
        $product = $item->get_product();
        if ( ! $product ) continue;

        // 显示商品名称(可选,用于区分不同商品)
        echo '<h6>' . esc_html( $item->get_name() ) . '</h6>';
        echo '<table><tbody>';

        // 遍历输出每个自定义字段
        foreach( $fields as $meta_key => $label ){
            // 从产品元数据中获取值
            $meta_value = $product->get_meta( $meta_key );
            
            // 仅当值存在时才输出
            if ( ! empty( $meta_value ) ) {
                echo '<tr><th>' . esc_html( $label ) . ':</th><td>' . esc_html( $meta_value ) . '</td></tr>';
            }
        }

        echo '</tbody></table>';
    }
}
add_action('woocommerce_thankyou', array($this, 'display_order_product_custom_meta') );

关键修复点

  1. 修正数据源:从产品对象$product->get_meta()获取自定义字段,而非订单对象,匹配你"产品元数据"的需求。
    • 如果你的自定义字段是在添加购物车时保存到订单项元数据中,将$product->get_meta( $meta_key )替换为$item->get_meta( $meta_key )即可。
  2. 优化显示逻辑:移除按商品数量重复输出的冗余循环,同一个商品的自定义信息仅显示一次。
  3. 安全与容错:使用esc_html()转义输出内容避免XSS风险,增加订单/产品对象的有效性判断,防止空对象报错。
  4. 友好标签:将纯字段键替换为用户易懂的中文标签,提升页面可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:06:00