Woocommerce 购物车会话到期
Woocommerce cart session expiration
如何在 x 时间后清除 Woocommerce 购物车。我需要在 30 分钟后重置会话(用例:购物车被放弃)。
尝试使用 Woocommerce 购物车过期插件,但它不适用于最新版本的 Woocommerce 5.7.1 Woocommerce cart expiration。
也尝试通过过滤器(粘贴在 functions.php 中),但它不起作用:
add_filter('wc_session_expiring', 'so_26545001_filter_session_expiring' );
function so_26545001_filter_session_expiring($seconds) {
return 60 * 25; // 25 mins
}
add_filter('wc_session_expiration', 'so_26545001_filter_session_expired' );
function so_26545001_filter_session_expired($seconds) {
return 60 * 30; // 30 mins
}
你可以试试这个 -
// Start session if not started
add_action('init', 'register_my_session');
function register_my_session(){
if( !session_id() ) {
session_start();
}
}
// Clear cart after 30 minutes
add_action( 'init', 'woocommerce_clear_cart' );
function woocommerce_clear_cart()
{
global $woocommerce;
$current_time = date( 'Y-m-d H:i:s');
$expiry_in_seconds = 1800; // 30 minutes
if (!isset($_SESSION['active_time']))
{
$_SESSION['active_time'] = date('Y-m-d H:i:s');
}
else{
// add 30 minutes
$cart_expiry_time = strtotime($_SESSION['active_time']) + $expiry_in_seconds;
// calculate seconds left
$diff = $cart_expiry_time - strtotime($current_time);
// round to minutes
$remaining_minutes = floor($diff/60);
// if time less than or equal to 1 minutes
if($remaining_minutes<=1)
{
//if (isset($_GET['clear-cart']) && $_GET['clear-cart'] == 1)
{
$woocommerce->cart->empty_cart();
//WC()->session->set('cart', array());
//}
}
}
}
最佳方法:您应该设置一个 cron 作业并相应地 运行 每 10 分钟一次。如果你想要 cronjob 的相同功能,请取消注释 if 条件并像这样增加剩余时间:
if($remaining_minutes<=15){
if (isset($_GET['clear-cart']) && $_GET['clear-cart'] == 1) {
$woocommerce->cart->empty_cart();
//WC()->session->set('cart', array());
}
}
并像这样在 cronejon 上添加 URL:
https://example.com?clear-cart=1 // 带参数的完整网站域名 ?clear-cart=1
如何在 x 时间后清除 Woocommerce 购物车。我需要在 30 分钟后重置会话(用例:购物车被放弃)。
尝试使用 Woocommerce 购物车过期插件,但它不适用于最新版本的 Woocommerce 5.7.1 Woocommerce cart expiration。
也尝试通过过滤器(粘贴在 functions.php 中),但它不起作用:
add_filter('wc_session_expiring', 'so_26545001_filter_session_expiring' );
function so_26545001_filter_session_expiring($seconds) {
return 60 * 25; // 25 mins
}
add_filter('wc_session_expiration', 'so_26545001_filter_session_expired' );
function so_26545001_filter_session_expired($seconds) {
return 60 * 30; // 30 mins
}
你可以试试这个 -
// Start session if not started
add_action('init', 'register_my_session');
function register_my_session(){
if( !session_id() ) {
session_start();
}
}
// Clear cart after 30 minutes
add_action( 'init', 'woocommerce_clear_cart' );
function woocommerce_clear_cart()
{
global $woocommerce;
$current_time = date( 'Y-m-d H:i:s');
$expiry_in_seconds = 1800; // 30 minutes
if (!isset($_SESSION['active_time']))
{
$_SESSION['active_time'] = date('Y-m-d H:i:s');
}
else{
// add 30 minutes
$cart_expiry_time = strtotime($_SESSION['active_time']) + $expiry_in_seconds;
// calculate seconds left
$diff = $cart_expiry_time - strtotime($current_time);
// round to minutes
$remaining_minutes = floor($diff/60);
// if time less than or equal to 1 minutes
if($remaining_minutes<=1)
{
//if (isset($_GET['clear-cart']) && $_GET['clear-cart'] == 1)
{
$woocommerce->cart->empty_cart();
//WC()->session->set('cart', array());
//}
}
}
}
最佳方法:您应该设置一个 cron 作业并相应地 运行 每 10 分钟一次。如果你想要 cronjob 的相同功能,请取消注释 if 条件并像这样增加剩余时间:
if($remaining_minutes<=15){
if (isset($_GET['clear-cart']) && $_GET['clear-cart'] == 1) {
$woocommerce->cart->empty_cart();
//WC()->session->set('cart', array());
}
}
并像这样在 cronejon 上添加 URL:
https://example.com?clear-cart=1 // 带参数的完整网站域名 ?clear-cart=1