如何修复WooCommerce编辑订单页属性列不支持可变产品的问题
问题原因
原有代码仅适配简单产品的核心问题是:直接读取$_product->post->ID时,可变产品的变体对应的ID是变体独立ID,而pa_marchio属性通常配置在父级可变产品上,无法通过变体ID取不到对应属性值;同时没有做非空判断,异常场景下会抛出PHP错误。
修复后代码
add_action( 'woocommerce_admin_order_item_headers', 'custom_admin_order_items_headers', 20, 1 ); function custom_admin_order_items_headers( $order ){ echo '<th>' . __('Marchio', 'woocommerce') . '</th>'; } add_action('woocommerce_admin_order_item_values', 'my_woocommerce_admin_order_item_values', 10, 3); function my_woocommerce_admin_order_item_values($_product, $item, $item_id = null) { // 过滤运费、手续费等非商品行 if( !is_a($_product, 'WC_Product') ){ echo '<td></td>'; return; } // 通用属性读取方法原生兼容简单/可变产品 $marchio = $_product->get_attribute('pa_marchio'); echo '<td>' . esc_html($marchio) . '</td>'; }
适配说明
- 调用WC_Product原生的
get_attribute方法会自动处理产品类型:- 简单产品直接读取自身配置的
pa_marchio属性 - 可变产品优先读取变体自定义属性,没有配置的话自动读取父级可变产品的对应属性
- 简单产品直接读取自身配置的
- 新增类型判断过滤非商品行,避免报错
- 新增输出转义符合WordPress编码安全规范
实现效果如下:
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

