WooCommerce实现访问商品页自动加购并离开时清空购物车
WooCommerce 自动加购/清空购物车解决方案
问题分析
你原来的代码存在几个关键问题:
- 用
is_page($slug)判断商品页错误:商品页属于WooCommerce自定义文章类型product,is_page()仅识别普通WordPress页面,无法匹配商品页。 global $product不可靠:在wp钩子时机,该全局对象可能未完全初始化,导致获取不到商品ID。- 缺少离开商品页的清空逻辑:原代码只处理了进入商品页的情况,未实现离开时清空购物车的需求。
可行代码实现
将以下代码添加到主题的functions.php文件或自定义插件中:
add_action('wp', 'auto_add_product_to_cart_on_product_page'); function auto_add_product_to_cart_on_product_page() { // 确保WooCommerce购物车功能正常加载 if (!function_exists('WC') || !WC()->cart) { return; } // 访问商品页面时:清空购物车并添加当前商品 if (is_product()) { $current_product = get_queried_object(); $product_id = $current_product->get_id(); WC()->cart->empty_cart(); WC()->cart->add_to_cart($product_id); } // 离开商品页面时:清空购物车 else { WC()->cart->empty_cart(); } }
代码说明
is_product():专门用于判断当前页面是否为WooCommerce商品页,替代错误的is_page()判断。get_queried_object():可靠获取当前页面的商品对象,避免全局变量未初始化的问题。- 双向逻辑处理:进入商品页自动加当前商品,离开则清空购物车,完全匹配需求。
- 兼容性检查:先验证WooCommerce功能是否可用,避免无意义的报错。
注意事项
- 建议先在测试环境验证代码效果,再部署到生产环境。
- 如果站点使用缓存插件,修改代码后需清理缓存才能生效。
内容的提问来源于stack exchange,提问作者Mr Saad
相关产品推荐
相关产品推荐

