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

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);

修正后的代码及说明

你的代码存在两个核心问题:

  1. array_search返回的是整数索引,判断时误用了字符串'false',但该函数找不到匹配项时返回的是布尔值false,导致判断逻辑失效。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:35:22