Я использую 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 );
Ни то, ни другое не работает. Есть идеи, как увеличить время ожидания сессии?
Искал по сети и переходил по ссылке, которую вы дали. есть функция, которая создает 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 минут.
У меня ничего не получалось, поэтому я нанял кого-то для этого. Эта функция увеличивает срок действия корзины 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, которое происходит до того, как может быть запущен любой код темы. Таким образом, добавление фильтров не имеет никакого эффекта, поскольку то, что запускает фильтры, уже выполнено, прежде чем ваш код сможет добавить их в очередь.
Я работал над этим, создав небольшой пользовательский плагин, который может применять пользовательские фильтры до первой инициализации плагина 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);