wordpress - Woocommerce 购物车 session 过期

标签 wordpress session woocommerce cart

如何在 x 时间后清除 Woocommerce 购物车。我需要在 30 分钟后重置 session (用例:购物车被放弃)。
尝试使用 Woocommerce Cart Expiration 插件,但它不适用于最新版本的 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

关于wordpress - Woocommerce 购物车 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69545286/

相关文章:

javascript - 在 JavaScript 中使用 PHP 变量

html - CSS 类不更新 HTML 内容

php - 也获取适用于 Woocommerce 产品变体的 is_purchasable Hook

wordpress - WooCommerce 结账

php - 寻找更有效的方式来服务大量链接重定向?

php - WooCommerce - 为免费用户计划添加运费

session - 记录 Tomcat 过期 session 的策略

php - WordPress:使用自定义字段的日期删除帖子

jQuery POST 请求后 PHP session 数据丢失

php - 按类别(术语)过滤 WooCommerce $order 商品