Попытка увеличить время сеанса корзин (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

Итак, я попробовал:

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 ответа

Решение

У меня ничего не получалось, поэтому я нанял кого-то для этого. Эта функция увеличивает срок действия корзины 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 );

Искал по сети и переходил по ссылке, которую вы дали. есть функция, которая создает 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');

В основном он проверяет, установлен ли уже файл cookie корзины EDD, а затем устанавливает его снова с увеличенным сроком действия. Я уверен, что есть лучший способ сделать это, но он должен предотвратить истечение срока действия ваших тележек каждые 30 минут.

Это потому, что сессия создается в действии 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);

источник

Другие вопросы по тегам