首页 > 解决方案 > 如果未登录,用户将被重定向到“我的帐户”页面。如果已登录,仍然会被重定向。缓存重定向?

问题描述

我在我的 functions.php 中添加了代码,如果他们尝试访问任何 Woocommerce 页面,则将用户重定向到我的帐户页面。

add_action('template_redirect', 'wc_redirect_non_logged_to_login_access');
函数 wc_redirect_non_logged_to_login_access() {

if ( !is_user_logged_in() && ( is_woocommerce() || is_shop() || is_cart() || is_checkout() ) ) { wp_redirect( get_permalink( get_option('woocommerce_myaccount_page_id')) ); exit(); }}

一切正常 - 用户尝试访问 Shop 页面,他们确实获得了重定向到 My Account 页面,登录后他们可以访问 Shop。

当我迁移到 WP Engine 时,问题就开始了。现在,如果用户访问 Shop 页面,被重定向到 My Account,登录并尝试访问 Shop - 他仍然会被重定向到 My Account。

我联系了 WP Engine,他们添加了下面列出的 Woocommerce 缓存排除项:

^/cart/
^/my-account/
^/checkout/
^/product-category/
^/product/
^/wc-api/
^/resetpassword/
product
wc-api=
woocommerce_cart_hash
woocommerce_items_in_cart
Wp_woocommerce_session_
wp-resetpass-

但问题仍然存在。

域通过 Cloudflare,所以我免除了这条路径的缓存。所以我为 /my-account/ 页面制定了页面规则 - 缓存级别 - 绕过,但问题仍然存在。这是我的页面规则:https ://ibb.co/28k84cM

之后,我做了一个小实验,并添加了一个由 WP Engine 托管的测试站点 ( https://residenceineu.wpengine.com/ )。DNS 不会通过 Cloudflare。一切都在 WP Engine 上 - 托管和域。结果,问题并没有消失。因此,我认为 WP Engine 有问题。

这是响应式标头信息的屏幕截图:https ://ibb.co/dMwQ8t5

通过,当我在浏览器检查设置中禁用浏览器缓存时,问题消失了。

有趣的一点是,当代码添加到functions.php时,如果我们首先访问我的帐户页面(没有点击商店页面)然后登录,登录后我们访问商店页面,我们可以访问它 - 没有重定向,一切正常。问题从我们第一次访问商店页面开始,然后被重定向到我的帐户,登录后我们尝试再次访问商店页面。

总结一下——当我们访问“我的帐户”页面然后转到“商店”页面时——没有缓存/重定向,一切正常。如果我们通过访问 Shop 页面以其他方式执行此操作 - 被重定向到我的帐户 - 登录 - 尝试访问 Sho 页面 = 再次被重定向到我的帐户,即使已登录。所以考虑到所有这些,似乎整个重定向如果我们在没有登录的情况下先访问 Shop 页面,进程会被缓存。

我正在与 WP Engine 支持人员联系,但我们仍然没有解决方案。

有任何想法吗?也许在迁移到 WP Engine 之后,他们会自动在 wp-config.php 或 .htaccess 文件中重写一些内容?

谢谢!

标签: phpfunctionredirectcachingwoocommerce

解决方案


WP Engine 专门从缓存中排除 /shop/ 路径。这解决了这个问题。


推荐阅读