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

如何在PHP中获取Woocommerce单个商品的购物车数量?

WooCommerce购物车单个商品信息获取解决方案

刚接触Woocommerce开发,目前已实现展示购物车中所有商品的名称及数量,但无法单独获取单个商品的对应信息。移除foreach循环后,出现错误提示:‘Undefined index: data in /filepath of folder’。当前遍历所有商品的代码如下:

$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
    echo " ";
    $_product =  wc_get_product( $values['data']->get_id()); 
    echo "<b>".$_product->get_title().'</b>  <br> Quantity: '.$values['quantity'].'<br>'; 
    $price = get_post_meta($values['product_id'] , '_price', true);
    echo "  Price: ".$price."<br>";
}

问题根源

移除foreach后报错,是因为直接访问$items元素时,要么目标元素不存在,要么索引方式错误,导致找不到data键。get_cart()返回的是关联数组,键是购物车项的唯一标识,值是包含商品数据的数组,直接硬取元素很容易踩坑。

单独获取单个商品信息的实用方法

方法1:通过购物车项键直接获取

如果你知道目标商品的购物车项键(比如循环时拿到的$item值),可以直接定位:

$items = $woocommerce->cart->get_cart();
// 替换成实际的购物车项键
$target_item_key = 'your_cart_item_key_here';

// 先检查键是否存在,避免报错
if (isset($items[$target_item_key])) {
    $item_data = $items[$target_item_key];
    // $values['data']本身就是WC_Product对象,无需重复调用wc_get_product
    $_product = $item_data['data']; 
    echo "<b>".$_product->get_title().'</b><br>';
    echo "Quantity: ".$item_data['quantity'].'<br>';
    echo "Price: ".$_product->get_price().'<br>';
} else {
    echo "该商品不在购物车中";
}

方法2:通过商品ID查找购物车项

如果你只有商品ID,遍历购物车匹配即可:

$items = $woocommerce->cart->get_cart();
$target_product_id = 123; // 替换成目标商品ID
$found_item = false;

foreach ($items as $item_key => $item_data) {
    if ($item_data['product_id'] == $target_product_id) {
        $found_item = $item_data;
        break;
    }
}

if ($found_item) {
    $_product = $found_item['data'];
    echo "<b>".$_product->get_title().'</b><br>';
    echo "Quantity: ".$found_item['quantity'].'<br>';
    echo "Price: ".$_product->get_price().'<br>';
} else {
    echo "该商品不在购物车中";
}

额外优化提示

  • 原代码里wc_get_product( $values['data']->get_id())是冗余操作,$values['data']本身就是WC_Product对象,直接调用方法即可。
  • 获取价格优先用$_product->get_price(),比直接读_price元数据更靠谱,能自动适配折扣、变体价格等场景。
  • 所有数组元素访问前,一定要用isset()检查,从根源避免Undefined index错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:35:25