如何修改WordPress后台WooCommerce订单详情页的商品名称?
问题描述
我有一个带下拉框字段的表单,可根据下拉框选项修改商品名称。目前已通过以下钩子成功修改了购物车、结账页及感谢页的订单详情商品名称:
add_filter('woocommerce_cart_item_name', 'change_product_name_in_cart', 10, 3); add_filter('woocommerce_checkout_item_name', 'change_product_name_in_cart', 10, 3); add_filter('woocommerce_order_item_name', 'change_product_name_in_cart', 10, 3);
但WordPress后台的订单详情页商品名称无法修改,试了好几个钩子都没效果。
解决方案
要修改WooCommerce后台订单详情页的商品名称,需要针对后台的渲染逻辑添加专门的钩子,以下两种方法均可解决:
方法1:新增后台专属钩子
在原有代码基础上,添加这段代码:
add_filter('woocommerce_admin_order_item_name', 'change_product_name_in_admin_order', 10, 3); function change_product_name_in_admin_order($item_name, $item, $is_visible) { // 替换成你实际存储自定义名称的元数据键 $custom_name = $item->get_meta('your_dropdown_field_key'); if (!empty($custom_name)) { // 按需调整显示格式,比如拼接原名称或直接替换 $item_name = $custom_name; } return $item_name; }
方法2:扩展原有函数适配后台
如果想复用同一个函数处理前后端场景,修改原函数并添加后台钩子:
function change_product_name_in_cart($item_name, $cart_item, $cart_item_key) { $custom_name = ''; // 处理购物车/结账页的情况 if (is_array($cart_item) && isset($cart_item['your_dropdown_field_key'])) { $custom_name = $cart_item['your_dropdown_field_key']; } // 处理订单页(前台感谢页+后台详情页)的情况 elseif (is_a($cart_item, 'WC_Order_Item_Product')) { $custom_name = $cart_item->get_meta('your_dropdown_field_key'); } if (!empty($custom_name)) { $item_name = $custom_name; } return $item_name; } // 保留原有三个钩子,新增后台钩子 add_filter('woocommerce_admin_order_item_name', 'change_product_name_in_cart', 10, 3);
注意事项
- 把代码里的
your_dropdown_field_key替换成你表单下拉框实际的字段键(即存储自定义名称的元数据键)。 - 如果自定义名称存储在订单项元数据中,必须用
get_meta()方法获取,避免直接访问数组导致报错。
内容的提问来源于stack exchange,提问作者Abdul Rehman
相关产品推荐
相关产品推荐

