【问题标题】:Woocommerce cart session expirationWoocommerce 购物车会话到期
【发布时间】:2021-12-01 07:56:06
【问题描述】:

如何在 x 时间后清除 Woocommerce 购物车。我需要在 30 分钟后重置会话(用例:购物车被放弃)。

尝试使用 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
}

【问题讨论】:

    标签: wordpress session woocommerce cart


    【解决方案1】:

    你可以试试这个-

    // 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

    【讨论】:

    • 非常感谢!我在 30 多分钟前将两种产品添加到购物车中(登录和注销时都 - 隐身),现在它们从购物车中消失了。惊人的。如果上面的 sn-p 有效,我还应该添加 cronjob 吗?
    • 是的,30 分钟后自动删除 - 需要 cronjob
    猜你喜欢
    • 2018-11-27
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多