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

WooCommerce求助:结账页面调用get_cart_contents_count返回值异常

解决WooCommerce get_cart_contents_count()始终返回1的问题

我之前也踩过这个坑!别着急,咱们一步步排查和解决:

1. 确认函数调用的时机是否正确

WooCommerce的购物车数据是在woocommerce_init钩子之后才完全初始化的,如果在更早的钩子(比如init甚至wp_loaded之前)调用get_cart_contents_count(),会因为购物车对象还没加载完成,返回默认值1。

你需要确保在结账页面的合适钩子中调用这个函数,比如woocommerce_checkout_before_order_review或者woocommerce_checkout_after_order_review。示例代码:

add_action( 'woocommerce_checkout_before_order_review', 'show_cart_total_items_on_checkout' );
function show_cart_total_items_on_checkout() {
    // 先确认购物车对象存在
    if ( ! isset( WC()->cart ) ) {
        return;
    }
    $total_items = WC()->cart->get_cart_contents_count();
    echo '<div class="cart-item-count">购物车商品总数量:' . $total_items . '</div>';
}

2. 排查插件/主题冲突

有些第三方插件(尤其是修改购物车、结账逻辑的插件)或者自定义主题的代码,可能会干扰WooCommerce购物车的正常运行。

你可以临时切换到默认主题(比如Storefront),然后逐个禁用其他插件,每次禁用后测试get_cart_contents_count()的返回值,找到导致问题的插件/主题代码。

3. 检查是否有自定义过滤钩子篡改了返回值

检查你的主题functions.php文件、自定义插件中,是否存在过滤woocommerce_cart_contents_count的代码,比如不小心把返回值写死成1的情况:

// 类似这样的代码会强制返回1
add_filter( 'woocommerce_cart_contents_count', function( $count ) {
    return 1;
} );

如果找到这类代码,注释掉或者修改逻辑即可。

4. 清除缓存(关键!)

很多缓存插件(比如WP Rocket、W3 Total Cache)会缓存结账页面,导致购物车数据无法实时更新,看起来函数始终返回1。

尝试清除网站所有缓存,并且在缓存插件的设置中,将结账页面排除在缓存规则之外,确保购物车数据是动态获取的。

额外提醒:区分“商品条目数”和“总数量”

如果你的需求是显示购物车中不同商品的种类数(比如买了2件A商品+3件B商品,种类数是2),那应该用count( WC()->cart->get_cart() );而get_cart_contents_count()返回的是所有商品的总数量(这里就是5),别搞混啦!

内容的提问来源于stack exchange,提问作者Digital Essence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:17:30