【问题标题】:Trying to increase the session time of cart items (EDD & Wordpress)试图增加购物车项目的会话时间(EDD 和 Wordpress)
【发布时间】:2015-07-30 16:54:18
【问题描述】:

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

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

【问题讨论】:

    标签: php wordpress session session-timeout easy-digital-downloads


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是另一种方法:

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

      【讨论】:

        【解决方案3】:

        没有什么对我有用,所以我雇了人来做。此功能将 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 );
        

        【讨论】:

          【解决方案4】:

          这是因为会话是在 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);
          

          source

          【讨论】:

            猜你喜欢
            • 2013-05-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多