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

如何在WooCommerce后台订单页面添加自定义行?代码失效求助

解决WooCommerce后台订单表格添加自定义列的问题

问题分析

你当前使用的woocommerce_admin_order_item_values钩子本身可用,但代码存在几个关键问题:

  • 未初始化$quantity_display变量,条件不满足时会触发报错
  • 直接echo内容会破坏原有表格结构,没有精准定位到数量列后添加内容的逻辑
  • 遍历元数据时未做类型判断,且找到目标值后未终止循环,存在冗余执行

修正方案

要在数量列后添加自定义数据,需分两步实现:先添加自定义表头,再填充对应列的内容。

步骤1:插入自定义表头

使用woocommerce_admin_order_item_headers钩子,在数量列后添加新表头:

add_action('woocommerce_admin_order_item_headers', 'add_custom_order_item_header');
function add_custom_order_item_header() {
    echo '<th class="custom-quantity-unit">带单位数量</th>';
}

步骤2:填充自定义列内容

修正woocommerce_admin_order_item_values的逻辑,安全输出自定义数据:

add_action('woocommerce_admin_order_item_values', 'add_custom_order_item_value', 10, 3);
function add_custom_order_item_value($product, $item, $item_id) {
    // 仅处理产品类订单项目,排除运费、税费等非产品项
    if (!is_a($item, 'WC_Order_Item_Product')) return;

    $quantity = $item->get_quantity();
    $quantity_display = $quantity; // 默认显示原始数量

    // 遍历元数据查找目标标识
    foreach ($item->get_meta_data() as $meta) {
        $meta_value = $meta->value;
        if (is_array($meta_value) && isset($meta_value['tabNumber']) && $meta_value['tabNumber'] === 'square-meter-li') {
            $quantity_display = $quantity . ' m2';
            break; // 找到目标后终止循环,提升效率
        }
    }

    // 安全输出自定义列内容
    echo '<td class="custom-quantity-unit">' . esc_html($quantity_display) . '</td>';
}

关键改进点

  • 增加订单项目类型判断,避免非产品项触发错误
  • 初始化默认值,确保所有场景下都有合法输出
  • 使用esc_html()过滤输出内容,防范XSS风险
  • 找到目标元数据后立即终止循环,减少不必要的遍历
  • 通过新增列的方式修改表格,避免破坏原有数量列的结构

可选:样式优化

如果需要调整自定义列的显示样式,可添加以下CSS:

add_action('admin_head', 'custom_order_item_css');
function custom_order_item_css() {
    echo '<style>
        .wc-order-items .custom-quantity-unit {
            width: 90px;
            text-align: center;
        }
    </style>';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:14:59