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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:13:22