4

我正在使用 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 );

两者都不起作用。任何想法如何增加会话超时?

4

4 回答 4

2

在网上搜索并通过您提供的链接。有一个功能是为用户创建一个 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 小时后过期。测试一样。让我知道它是否也适合你。

于 2015-06-09T13:38:39.143 回答
1

这是另一种方法:

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 分钟过期一次。

于 2016-02-06T08:08:13.803 回答
0

没有什么对我有用,所以我雇了一个人来做。此功能将 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 );
于 2016-09-26T16:07:48.560 回答
0

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

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

将类似以下内容添加到自定义插件文件中:

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);

资源

于 2017-09-28T07:38:29.647 回答