深入解析WooCommerce购物车会话和持久购物车

by

in

在研究WooCommerce 购物车会话管理时,开发者往往会关注访客购物车在过期前可以保存多长时间。WooCommerce 通常以一个核心功能来确保默认行为:会话在 48 小时后过期,软过期时间为 47 小时

而开发者往往会进一步探究更多关于购物车更新后会话过期时间是否会延长,以及访客用户和登录用户之间有何不同等问题。这就涉及了_woocommerce_persistent_cart_已登录用户选择该选项的作用,以及考虑到会话持续时间更长,该选项是否仍然必要。

如果您曾经想知道 WooCommerce 如何存储购物车数据或它在不同用户之间的行为方式,那么这篇文章总结了关键发现,并直接链接到 WooCommerce 核心代码和可能影响未来版本的讨论。

WooCommerce会话过期:基础知识

WooCommerce 使用其自身的会话管理系统来存储访客用户和已登录用户的购物车数据。这些会话的默认过期时间为 48 小时。

以下是相关代码片段:

public function set_session_expiration() {
   $this->_session_expiring = time() + intval( apply_filters( 'wc_session_expiring', 60 * 60 * 47 ) ); // 47 Hours.
   $this->_session_expiration = time() + intval( apply_filters( 'wc_session_expiration', 60 * 60 * 48 ) ); // 48 Hours.
}

这意味着会话被标记为“将在 47 小时后过期”,但实际上会在 48 小时后过期。这些持续时间可以使用 ` wc_session_expiring 和`wc_session_expiration 过滤器进行筛选,使开发人员能够完全控制购物车会话的生命周期。

会话延长和购物车更新

开发者可能会认为会话会在创建后 48 小时准时过期,但这并不完全准确。如果在会话即将过期时购物车内有活动,会话有效期将会延长

换句话说,如果用户在会话过期前返回购物车并与之互动(尤其是在会话窗口即将结束时),WooCommerce 可以自动续订会话。此举旨在改善购物体验,并减少因会话过期导致的购物车放弃率。

这些会话仅限访客用户参加吗?

你可能会认为 WooCommerce 会话仅与访客(未登录)用户相关,但事实并非如此。WooCommerce 对访客用户和已登录用户使用相同的会话机制

但是,对于已登录用户来说,还有一种额外的机制在起作用:持久购物车

什么是持久购物车?

持久化购物车会将用户的购物车存储在 WordPress 的 usermeta 数据库中。这意味着,如果已登录用户将商品添加到购物车,然后注销,一周后再登录,他们的购物车仍然会保留在那里——无论会话是否过期

这是由_woocommerce_persistent_cart_{blog_id}元键管理的。

默认情况下,此持久购物车功能已启用。开发者可以使用以下过滤器禁用它:

add_filter( 'woocommerce_persistent_cart_enabled', '__return_false' );

这种方法在 WooCommerce 中已经存在多年(确切地说是七年),并且是对会话系统的补充,而不是取代它——直到现在。

持久购物车功能要取消了吗?

GitHub 上有一个 Pull Request (#57961),目的是移除持久购物车,转而采用更长时间的会话。

该提案概述了以下几个动机:

  • 仅依赖一个系统来降低复杂性。
  • 简化调试和会话处理。
  • 让所有用户在购物车中的体验更加一致。

这一转变意味着访客用户和登录用户都将依赖会话存储,并且可能会有更长的默认会话持续时间或更强大的会话管理工具。

对店主和开发者的影响

如果持久购物车功能确实被移除,维护自定义购物车处理代码的开发人员可能需要重新考虑如何为已登录用户保存购物车数据

对于店主来说,这种变化应该基本是透明的——除非他们依赖持久购物车行为来实现特定用例,例如跨设备记住购物车或跨会话同步购物车。

不过,这也凸显了保持 WooCommerce 安装更新以及测试可能受核心更改影响的自定义项的重要性。

监控会话:开发者小贴士

如果您想了解 WooCommerce 中的会话数据,这里有一些工具和技巧:

  • WC()->session:您可以通过WC()->session->get()和与会话变量进行交互WC()->session->set()
  • wp_wc_session_表*:WooCommerce 将会话存储在您可以直接查询的自定义数据库表中。
  • Cookies:WooCommerce 使用 cookies(例如 cookies wp_woocommerce_session_)来跟踪会话 ID。

了解这些层次结构有助于开发人员和高级店主更好地排查问题,并围绕购物车和结账体验构建增强功能。

结论

这个帖子充分说明了 WooCommerce 的会话和购物车存储系统是多么复杂——甚至像持久购物车这样的长期功能也可能被逐步淘汰,以求简化。

虽然会话默认在 48 小时后过期,但其行为会受到用户交互、筛选条件以及用户类型(访客或已登录用户)的影响。如果持久购物车最终被弃用,开发者和商家将更加依赖会话系统的灵活性。

及时了解这些变化并测试其影响,是确保您的 WooCommerce 商店提供可靠且有利于转化的购物体验的关键。