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

