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

如何仅在WooCommerce后台订单视图显示订单项自定义元数据?

解决WooCommerce自定义订单数据仅后台显示的问题

要实现定制数据仅在后台订单订单项显示、不向客户展示的需求,需要从数据存储和后台显示两个方面调整代码:

1. 调整订单数据存储逻辑(隐藏前台显示)

修改你之前的add_custom_data_to_order函数,在调用add_meta_data时传入第三个参数$hidden = true,这样WooCommerce会自动隐藏该元数据在前台的所有展示(包括结账页、订单详情页等):

function add_custom_data_to_order($item, $cart_item_key, $values, $order) {
    if (isset($values["custom_data"])) {
        // 第三个参数设为true,标记该元数据仅后台可见
        $item->add_meta_data("custom_data", $values["custom_data"], true);
    }
}
add_action("woocommerce_checkout_create_order_line_item", "add_custom_data_to_order", 10, 4);

2. 后台订单页面格式化显示定制数据

默认后台会直接显示JSON字符串,不利于生产环节查看。可以通过woocommerce_admin_order_item_values钩子,解析JSON并以友好的格式展示:

function display_custom_data_in_admin_order($product, $item, $item_id) {
    // 仅在后台执行,且当前订单项存在custom_data元数据时处理
    if (!is_admin()) return;
    $custom_data = $item->get_meta("custom_data");
    if (empty($custom_data)) return;

    // 解析JSON字符串为数组
    $custom_data_array = json_decode($custom_data, true);
    if (empty($custom_data_array)) return;

    // 输出格式化的定制信息
    echo '<div class="custom-data-section">';
    echo '<h4>定制信息</h4>';
    echo '<ul>';
    foreach ($custom_data_array as $key => $value) {
        echo '<li><strong>' . esc_html($key) . ':</strong> ' . esc_html($value) . '</li>';
    }
    echo '</ul></div>';
}
add_action("woocommerce_admin_order_item_values", "display_custom_data_in_admin_order", 10, 3);

代码说明

  • 存储时的$hidden=true:告诉WooCommerce该元数据属于"私有",不会在前台任何页面渲染。
  • 后台显示钩子:专门针对后台订单订单项区域,解析JSON后以列表形式展示,方便生产人员查看坐标、尺寸等信息。
  • 额外的安全处理:使用esc_html转义输出内容,避免XSS风险;添加空值判断,防止解析失败导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:03:27