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

