Woocommerce购物车重复添加商品后关联商品展示异常求助
WooCommerce 购物车重复添加商品时关联商品展示问题
我在WooCommerce中实现了根据购物车最后添加的商品展示关联商品的功能。当前逻辑在商品首次加入购物车时能正常获取最后一个商品ID并展示正确的关联商品,但当已在购物车中的商品再次被添加时,end($cart)拿到的仍是该商品ID,导致关联商品逻辑出错。
我的思路是:检查最后添加的商品ID是否已存在于购物车商品ID数组中,若存在则移除数组里的第一个实例,将其移至数组末尾,确保end($ids)能正确拿到“最后操作的商品ID”。我写的代码如下:
$cart = WC()->cart->get_cart(); $cart_is_empty = WC()->cart->is_empty(); $product_id = end($cart)['data']->post->ID; $items_count = 3; $exclude_ids = array(); $ids = array(); if(! $cart_is_empty ) { foreach ($cart as $cart_item) { $exclude_ids[] = $cart_item['product_id']; $ids[] = $cart_item['product_id']; } $last_item = array_search($product_id, $ids); if($last_item !== 'false') { unset($ids[$last_item]); array_push($ids, $last_item); } $product_id = end($ids); $related_products = WC()->get_related_products($product_id,$items_count,$excluded_ids);
修正后的代码及说明
你的代码存在两个核心问题:
array_search返回的是整数索引,判断时误用了字符串'false',但该函数找不到匹配项时返回的是布尔值false,导致判断逻辑失效。array_push($ids, $last_item)将索引值而非商品ID加入数组,导致end($ids)拿到的不是目标商品ID。
修正后的代码:
$cart = WC()->cart->get_cart(); $cart_is_empty = WC()->cart->is_empty(); $items_count = 3; $exclude_ids = array(); $ids = array(); if(!$cart_is_empty) { foreach ($cart as $cart_item) { $exclude_ids[] = $cart_item['product_id']; $ids[] = $cart_item['product_id']; } // 获取购物车最后一个商品的ID(使用WooCommerce规范方法) $last_added_product_id = end($cart)['data']->get_id(); // 查找该ID在数组中的第一个出现位置 $first_index = array_search($last_added_product_id, $ids); if($first_index !== false) { // 移除第一个实例 unset($ids[$first_index]); // 重新索引数组,避免索引断裂 $ids = array_values($ids); // 将目标商品ID移至数组末尾 $ids[] = $last_added_product_id; } // 获取最终目标商品ID $target_product_id = end($ids); $related_products = WC()->get_related_products($target_product_id, $items_count, $exclude_ids); }
关键修正点:
- 替换
post->ID为get_id():WooCommerce 3.0+推荐使用产品对象的get_id()方法,避免直接访问post属性,提升兼容性。 - 修正判断条件:使用
$first_index !== false匹配array_search的返回值类型。 - 数组重新索引:移除元素后用
array_values()重置索引,确保end()能正确获取最后一个元素。 - 修正添加逻辑:将商品ID而非索引值加入数组末尾,保证目标ID的正确性。
内容的提问来源于stack exchange,提问作者Broder s
相关产品推荐
相关产品推荐

