如何在WooCommerce中首次添加商品至购物车时显示30分钟购物提醒?
在WooCommerce实现首次加购提示+30分钟超时清空购物车
当然可以实现这个需求!针对不同技术背景的开发者,我整理了两种实用方案:
方案一:自定义代码实现(适合有开发能力的用户)
这个方案通过WooCommerce的钩子函数来实现,灵活性更高,不需要依赖第三方插件。
1. 检测首次加购并设置会话+显示提示
将以下代码添加到你的主题functions.php文件中,或者自定义插件里:
// 检测首次加购并设置会话+显示提示 add_action('woocommerce_add_to_cart', 'wc_first_add_to_cart_session', 10, 6); function wc_first_add_to_cart_session($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) { // 判断是否是首次加购(未记录过加购时间) if (!WC()->session->get('first_add_to_cart_time')) { // 记录当前时间戳到会话中 WC()->session->set('first_add_to_cart_time', time()); // 向用户显示提示消息 wc_add_notice(__('温馨提示:您拥有30分钟的购物时间,超时后购物车将自动清空,请尽快完成下单!', 'woocommerce'), 'notice'); } }
2. 定时检查超时并清空购物车
同样添加到functions.php或自定义插件,处理游客和登录用户的不同存储方式:
// 检查购物车超时并执行清空操作 add_action('woocommerce_init', 'wc_check_cart_timeout'); function wc_check_cart_timeout() { $first_add_time = ''; // 区分登录用户和游客的时间存储方式 if (is_user_logged_in()) { $first_add_time = get_user_meta(get_current_user_id(), 'first_add_to_cart_time', true); } else { $first_add_time = WC()->session->get('first_add_to_cart_time'); } // 判断是否超时(30分钟=1800秒) if ($first_add_time && (time() - $first_add_time > 1800)) { // 清空购物车 WC()->cart->empty_cart(); // 清理时间记录,避免重复触发 if (is_user_logged_in()) { delete_user_meta(get_current_user_id(), 'first_add_to_cart_time'); } else { WC()->session->__unset('first_add_to_cart_time'); } // 显示超时提示 wc_add_notice(__('您的购物车已超时,已自动清空,请重新选购商品!', 'woocommerce'), 'error'); } }
补充说明
- 登录用户的购物车数据存储在数据库中,所以用用户元数据记录加购时间;游客则用WooCommerce会话存储。
- 代码中的提示文本可以根据你的需求自行修改。
方案二:使用插件实现(适合非技术用户)
如果不想写代码,可以借助专门的WooCommerce购物车超时插件,比如Cart Expiration for WooCommerce:
- 安装并激活插件后,在插件设置页面可以直接设置购物车超时时间为30分钟。
- 对于首次加购的提示消息,可以通过WooCommerce的「设置→消息」选项自定义,或者使用插件自带的提示功能(部分插件支持自定义触发条件的提示)。
内容的提问来源于stack exchange,提问作者James Donald
相关产品推荐
相关产品推荐

