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
相关产品推荐
相关产品推荐

