WooCommerce后台订单商品列显示产品自定义字段值问题求助
问题排查与解决方法
核心问题原因
你当前在订单商品列取值的代码完全错误——你写的是读取locatie分类的术语名称,但实际应该读取你创建的plek自定义字段值。另外还有几处小问题影响功能和体验:
- 用了过时的产品ID获取方式,新版WooCommerce不推荐直接调用
post对象 - 保存字段时没处理空值情况,清空输入后旧数据会残留
- 表头和内容列的对齐样式不一致,视觉不协调
修正后的完整代码
替换你原有的my_woocommerce_admin_order_item_values函数,同时优化保存字段的逻辑:
// 添加自定义列表头 add_action('woocommerce_admin_order_item_headers', 'my_woocommerce_admin_order_item_headers'); function my_woocommerce_admin_order_item_headers() { $column_name = 'Plek'; echo '<th data-sort="float" style="text-align: right;" >' . $column_name . '</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) { // 用新版WooCommerce方法获取产品ID $product_id = $_product->get_id(); // 读取自定义字段plek的值 $value = get_post_meta($product_id, 'plek', true); // 空值时显示占位符,避免空白 $display_value = empty($value) ? '-' : $value; // 和表头保持右对齐 echo '<td style="text-align: right;">' . esc_html($display_value) . '</td>'; } // 在产品常规选项添加自定义字段 add_action( 'woocommerce_product_options_general_product_data', 'pans_woo_add_custom_general_fields' ); function pans_woo_add_custom_general_fields() { global $post; echo '<div class="pans_ta_options_group">'; woocommerce_wp_textarea_input( array( 'id' => 'plek', 'label' => __( 'Plek', 'woocommerce' ), 'placeholder' => 'Alleen zichtbaar voor Admins.', ) ); echo '</div>'; } // 保存自定义字段(优化空值处理) add_action( 'woocommerce_process_product_meta', 'pans_woo_add_custom_general_fields_save' ); function pans_woo_add_custom_general_fields_save( $post_id ){ $woocommerce_textarea = isset($_POST['plek']) ? sanitize_textarea_field($_POST['plek']) : ''; if( !empty( $woocommerce_textarea ) ) { update_post_meta( $post_id, 'plek', $woocommerce_textarea ); } else { // 清空输入时删除对应的元数据,避免旧值残留 delete_post_meta( $post_id, 'plek' ); } }
关键修改点说明
- 取值逻辑修正:把读取分类术语的代码换成
get_post_meta($product_id, 'plek', true),直接读取你创建的自定义字段值 - 产品ID获取优化:用
$_product->get_id()替代过时的$_product->post->ID,兼容新版WooCommerce - 空值处理:添加空值判断,为空时显示
-,同时保存时清空输入会删除对应元数据 - 样式统一:内容列添加
text-align: right;,和表头对齐
测试步骤
- 替换代码后,刷新WordPress后台
- 打开一个包含已设置
plek字段产品的订单详情页,查看自定义列是否显示对应值 - 测试清空产品的
plek字段并保存,查看订单列是否显示-
内容的提问来源于stack exchange,提问作者tandarts
相关产品推荐
相关产品推荐

