如何在不修改会话过期的情况下延长购物车的寿命?

时间:2019-06-12 15:32:10

标签: php wordpress woocommerce

我正在尝试为拥有帐户的用户延长WooCommerce购物车的使用寿命。我发现(并尝试过)的建议解决方案涉及延长会话有效期。

Woocommerce Set Cart Expiration Interval

但是,这不是我追求的目标。我希望会话过期保持不变,但是下次用户登录时,我希望他们的购物车最多保留六个月。

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

会话期满和购物车期满链接在一起:它们都使用相同的内部变量(类WC_Session_Handler$_session_expiration的受保护属性)。

您不能更改一个,而不能更改另一个。

通过WC_Session_Handler->cleanup_sessions()从数据库中删除购物车。这是由wc_cleanup_session_data()操作触发的功能woocommerce_cleanup_sessions调用的。

您可以尝试删除默认操作并提供自己的操作。

remove_action( 'woocommerce_cleanup_sessions', 'wc_cleanup_session_data' );

function my_cleanup_sessions() 
{
    global $wpdb;

    $wpdb->query( $wpdb->prepare( "DELETE FROM $this->_table WHERE session_expiry < %d", time() + 180 * 24 * 60 * 60 ) );

    if ( class_exists( 'WC_Cache_Helper' ) ) {
        WC_Cache_Helper::incr_cache_prefix( WC_SESSION_CACHE_GROUP );
    }
}
add_action( 'woocommerce_cleanup_sessions', 'my_cleanup_sessions' );

我尚未对此进行测试。它可能无法正常工作,并且可能会有副作用。