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

WooCommerce购物车与结账区块自定义购物车项数据重复渲染问题

解决WooCommerce自定义购物车项数据重复显示的问题

问题说明

我通过以下代码在商品加入购物车时添加自定义购物车项数据:

$cartData = array("_weekly_booking_price" => $weeklyPrice);

WC()->cart->add_to_cart( $productId, 1, 0, $cartData );

该逻辑在前端调用extensionCartUpdate时,通过woocommerce_store_api_register_update_callback函数执行。

我希望自定义数据能以人类可读的格式展示,但默认情况下WooCommerce会直接渲染数据键名_weekly_booking_price,显示效果很差。在旧版短码式结账中测试时结果符合预期,但使用以下过滤器后,自定义数据被渲染两次:一次是不可读的键名,另一次是过滤器设置的可读标签:

function clean_get_item_data($item_data, $cart_item_data)
{
    if (isset($cart_item_data['variation']['_weekly_booking_price'])) {

        $item_data[] = array(
            'key' => "Weekly booking price",
            'value' => wc_clean($cart_item_data['variation']['_weekly_booking_price']),
        );
    }

    return $item_data;
}
add_filter('woocommerce_get_item_data', 'clean_get_item_data', 10, 2);

解决方案

问题根源是:WooCommerce会自动遍历购物车项中的自定义变异数据,将其默认添加到$item_data数组中,而你的过滤器又额外追加了一次可读条目,导致重复显示。

修改过滤器函数,先移除默认的键名条目,再添加自定义可读标签的条目即可解决:

function clean_get_item_data($item_data, $cart_item_data)
{
    if (isset($cart_item_data['variation']['_weekly_booking_price'])) {
        // 遍历移除默认的键名条目
        foreach ($item_data as $index => $data) {
            if ($data['key'] === '_weekly_booking_price') {
                unset($item_data[$index]);
                break;
            }
        }
        // 添加可读标签的自定义条目
        $item_data[] = array(
            'key' => "每周预订价格",
            'value' => wc_clean($cart_item_data['variation']['_weekly_booking_price']),
        );
    }

    return $item_data;
}
add_filter('woocommerce_get_item_data', 'clean_get_item_data', 10, 2);

核心思路是替换而非追加:先清除系统自动生成的原始键名条目,再插入我们需要的可读格式数据,这样就只会显示一次符合需求的内容。

内容的提问来源于stack exchange,提问作者thefatshizms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:27:08