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
相关产品推荐
相关产品推荐

