WC()->cart->add_to_cart()直接访问购物车页面不生效如何解决?
问题根因
你遇到的执行差异本质是代码触发时机不对:
- 直接在cart.php模板文件中插入加购代码时,代码执行时机早于WooCommerce会话、购物车对象的完整初始化流程,此时调用
add_to_cart生成的购物车修改不会被持久化到会话中,刷新后就会丢失 - 从站点内其他页面跳转至购物车时,前序页面已经完成了用户会话初始化,此时加购操作可以正常写入会话
- 手动调用
set_customer_session_cookie无效的原因是调用时WC会话类尚未完成初始化,设置的cookie不会被写入响应头返回给浏览器
正确实现方案
不要直接修改cart.php模板文件,将以下代码添加到当前主题/子主题的functions.php文件中即可:
add_action( 'template_redirect', 'auto_add_specified_product_to_cart', 20 ); function auto_add_specified_product_to_cart() { // 仅在购物车页面触发 if ( ! is_cart() ) return; // 替换为你要自动添加的商品ID $target_product_id = 123; $product_in_cart = false; // 检查商品是否已在购物车中,避免重复添加 foreach ( WC()->cart->get_cart() as $cart_item ) { if ( $cart_item['product_id'] == $target_product_id ) { $product_in_cart = true; break; } } // 商品不在购物车时执行添加 if ( ! $product_in_cart ) { WC()->cart->add_to_cart( $target_product_id ); // 可选:添加后刷新页面保证购物车内容正确展示 wp_redirect( wc_get_cart_url() ); exit; } }
验证说明
代码添加完成后清除站点缓存,分别测试访客、登录用户直接访问购物车地址的场景,即可正常触发自动加购逻辑。
内容的提问来源于stack exchange,提问作者lwd
相关产品推荐
相关产品推荐

