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

WooCommerce自定义订单项meta如何在我的账户订单详情页正常显示

问题根源

你存储的_v_number是订单项层级的自定义字段(即每个订单内的单个商品条目对应的独立字段),而你之前调用的$order->get_meta('_v_number')是读取整个订单层级的全局元数据,二者存储位置完全不同,因此无法输出内容。

修复方案

方案1:在每个订单项下方自动展示对应V Number(推荐,无需修改模板)

直接使用WooCommerce自带的woocommerce_order_item_meta_end钩子,会自动在「我的账户-订单详情」页的每个订单项元数据后输出对应值,代码如下:

// 在我的账户订单详情页每个订单项后输出V Number
add_action( 'woocommerce_order_item_meta_end', 'display_v_number_in_myaccount_order', 10, 3 );
function display_v_number_in_myaccount_order( $item_id, $item, $order ) {
    // 仅在我的账户页的订单详情页生效
    if ( ! is_wc_endpoint_url( 'view-order' ) ) return;
    
    $v_number = $item->get_meta( '_v_number' );
    if ( ! empty( $v_number ) ) {
        printf( '<p>V Number :  <strong>%s</strong></p>', esc_html( $v_number ) );
    }
}

你可以直接把这段代码添加到主题的functions.php文件或者自定义功能插件中即可生效。

方案2:集中在订单详情的指定位置展示所有订单项的V Number

如果你需要把所有订单项的V Number统一放在订单详情的某个固定位置,可以用以下遍历代码替换你之前的输出代码:

// Display meta my account view order page
foreach ( $order->get_items() as $item_id => $item ) {
    $v_number = $item->get_meta( '_v_number' );
    if ( ! empty( $v_number ) ) {
        printf( '<p>%s - V Number :  <strong>%s</strong></p>', esc_html( $item->get_name() ), esc_html( $v_number ) );
    }
}

这段代码会遍历当前订单的所有商品条目,依次输出商品名称和对应的V Number,避免多个商品时分不清对应关系。

补充说明

如果你确认每个订单只会有一个商品,也可以直接取第一个订单项的对应值,不需要遍历:

$items = $order->get_items();
$first_item = reset( $items );
$v_number = $first_item ? $first_item->get_meta( '_v_number' ) : '';
if ( $v_number ) {
    printf( '<p>V Number :  <strong>%s</strong></p>', esc_html( $v_number ) );
}

内容的提问来源于stack exchange,提问作者Mary X Nabors

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 01:06:04