试图增加购物车项目的会话时间(EDD 和 Wordpress)

Trying to increase the session time of cart items (EDD & Wordpress)

我正在使用 WordPress 和 Easy Digital Downloads 插件,但购物车中的商品在闲置 30 分钟后将过期,我想将其增加到 48 小时左右,因为 30 分钟对于要删除的购物车。

我在 EDD 论坛上问过如何增加这个过期时间,但我只是得到了指向 add_filter 教程的链接,这些教程并没有真正帮助我使用这个特定的过滤器。

这是我被告知要利用以更改过期时间的过滤器: https://github.com/easydigitaldownloads/Easy-Digital-Downloads/blob/master/includes/class-edd-session.php#L93

所以我试过了:

add_filter( 'wp_session_expiration_variant', array( 'WP_Session', '86400 * 60' ), 99999 );
add_filter( 'wp_session_expiration', array( 'WP_Session', '86400 * 60' ), 99999 );

add_filter( 'wp_session_expiration_variant', array( 'EDD_Session', '86400 * 60' ), 99999 );
add_filter( 'wp_session_expiration', array( 'EDD_Session', '86400 * 60' ), 99999 );

都不行。有什么想法可以增加会话超时吗?

在网上搜索并浏览了您提供的 link。有一个为用户创建 cookie 30 分钟的功能,您需要根据需要重新配置此 cookie。

以下代码可能会帮助您实现此目的。

function change_expiration_cookie() {
    $cart = edd_get_cart_contents();
    if ( isset( $_COOKIE['edd_items_in_cart'] ) ) {
        $items = $_COOKIE['edd_items_in_cart'];
        @setcookie( 'edd_items_in_cart', $items, time() + 2880 * 60, COOKIEPATH, COOKIE_DOMAIN, false );
    } elseif ( $cart != false ) {
        $items = count( $cart );
        @setcookie( 'edd_items_in_cart', $items, time() + 2880 * 60, COOKIEPATH, COOKIE_DOMAIN, false );
    }
}
add_action( 'init', 'change_expiration_cookie' );

这会将 cookie 设置为在 48 小时后过期。测试相同。让我知道它是否也适合你。

这是另一种方法:

function nate_modify_cart_cookie() {
    if ( isset( $_COOKIE['edd_items_in_cart'] ) ) {
        $items = $_COOKIE['edd_items_in_cart'];
        @setcookie( 'edd_items_in_cart', $items, time() + 120 * 60, COOKIEPATH, COOKIE_DOMAIN, false );
    }
}
add_action('init', 'nate_modify_cart_cookie');

基本上它会检查 EDD 购物车 cookie 是否已设置,然后再次设置它并增加到期时间。我相信有更好的方法可以做到这一点,但它应该可以防止您的购物车每 30 分钟过期一次。

没有什么对我有用,所以我雇了人来做。此功能将 Easy Digital Downloads 购物车有效期延长至 48 小时:

add_filter( 'wp_session_expiration_variant', function() { return 46 * 60 * 60; }, 999999 );
add_filter( 'wp_session_expiration', function() { return 48 * 60 * 60; }, 999999 );
add_filter( 'edd_use_php_sessions', function() { return false; }, 999999 );

这是因为会话是在 plugin_loaded 操作中创建的,该操作发生在任何主题代码可以 运行 之前。所以添加过滤器没有任何效果,因为 运行s 过滤器在您的代码可以将它们添加到队列之前已经执行。

我通过创建一个小的自定义插件来解决这个问题,该插件可以在 WP 会话插件首次初始化之前应用自定义过滤器。

将如下内容添加到自定义插件文件中:

add_action('plugins_loaded', function () {
    add_filter('wp_session_expiration_variant', function () {
        return 20 * 60 * 60;
    });

    add_filter('wp_session_expiration', function () {
        return 24 * 60 * 60;
    });
}, 1);

source