如何在访问WordPress外的自定义PHP页面时清空WooCommerce购物车
如何在外部PHP页面清空WooCommerce购物车
你的需求很明确——用户访问外部的追加销售页面example.com/upsell.php时自动清空WooCommerce购物车会话。因为这个页面不在WordPress系统内,直接调用WooCommerce的函数是行不通的,得先把WordPress的环境拉进来才行。下面是具体的实现步骤和代码:
核心思路
要在外部页面操作WooCommerce购物车,必须先加载WordPress的核心文件,这样才能使用WooCommerce提供的API和会话管理功能。之后就可以调用官方的购物车清空方法,确保购物车完全重置。
完整代码示例
把这段代码放在upsell.php的最顶部(任何输出之前):
// 加载WordPress核心文件,根据你的目录结构调整路径 // 示例:如果upsell.php和WordPress根目录同级,用下面的路径 require_once(__DIR__ . '/wp-load.php'); // 确保WooCommerce插件已激活并加载 if (class_exists('WooCommerce')) { // 初始化WooCommerce用户会话(防止会话未建立导致清空失败) if (isset(WC()->session) && !WC()->session->has_session()) { WC()->session->set_customer_session_cookie(true); } // 调用WooCommerce内置方法清空购物车商品 WC()->cart->empty_cart(); // 可选:彻底清空购物车相关的会话数据(比如优惠券、临时计算数据) if (isset(WC()->session)) { WC()->session->__unset('cart'); WC()->session->__unset('applied_coupons'); WC()->session->__unset('coupon_discount_amounts'); WC()->session->__unset('cart_totals'); } }
关键细节说明
- 路径调整:
wp-load.php的路径一定要对应你的服务器目录结构。比如如果upsell.php在example.com/landing/upsell.php,那路径应该写成require_once(__DIR__ . '/../wp-load.php');(../表示回到上一级目录)。如果不确定路径,可以用echo __DIR__;打印当前文件的绝对路径,再对照WordPress根目录的位置调整。 - 会话初始化:有些用户访问外部页面时,WooCommerce的会话还没创建,直接调用
empty_cart()可能不起作用,所以先通过set_customer_session_cookie(true)初始化会话,确保购物车操作能生效。 - 额外会话清理:
empty_cart()主要是移除购物车商品,但如果之前用户使用过优惠券或者有临时的购物车计算数据,建议加上可选部分的代码,彻底清空相关会话,避免后续追加销售流程出现干扰。
测试验证
部署代码后,你可以按以下步骤测试:
- 先在WooCommerce购物车里添加几个商品
- 访问
example.com/upsell.php - 回到
example.com/store/cart/查看购物车是否已清空
如果一切正常,用户每次进入追加销售页面时,购物车都会被重置,不会影响后续的商品添加流程。
内容的提问来源于stack exchange,提问作者Suriya Karthikeyan
相关产品推荐
相关产品推荐

