WordPress ARMember插件下WooCommerce页面登录后回跳异常求助
问题解决方案
根因说明
- 你当前自定义的跳转代码拼接的
redirect_to参数缺失HTTP/HTTPS协议,WordPress原生登录跳转逻辑无法识别完整跳转目标 - ARMember插件的重定向规则优先级高于默认参数传递逻辑,会自动覆盖URL携带的
redirect_to参数,导致自定义跳转失效 - WooCommerce自带的账户页重定向逻辑和自定义代码存在优先级冲突
修复步骤
第一步:替换原有的未登录跳转代码
删掉你之前写的PHP片段,先添加自定义登录页适配代码,保证wp_login_url函数输出你正在使用的/login地址:
add_filter( 'login_url', 'custom_login_page_url', 10, 2 ); function custom_login_page_url( $login_url, $redirect ) { $custom_login_url = home_url( '/login' ); if ( ! empty( $redirect ) ) { return add_query_arg( 'redirect_to', urlencode( $redirect ), $custom_login_url ); } return $custom_login_url; }
再添加上未登录访问WooCommerce页面的跳转逻辑:
add_action( 'template_redirect', 'wc_redirect_non_logged_to_login_access'); function wc_redirect_non_logged_to_login_access() { if ( ! is_user_logged_in() && ( is_woocommerce() || is_shop() || is_cart() || is_checkout() || is_account_page() ) ) { $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; wp_redirect( wp_login_url( $current_url ) ); exit(); } }
第二步:添加高优先级登录后重定向钩子
新增以下代码,指定登录后优先读取redirect_to参数的跳转目标,优先级设置为999,覆盖ARMember和WooCommerce的默认重定向规则:
add_filter( 'login_redirect', 'custom_login_redirect_after_login', 999, 3 ); function custom_login_redirect_after_login( $redirect_to, $request, $user ) { if ( isset( $_REQUEST['redirect_to'] ) && ! empty( $_REQUEST['redirect_to'] ) ) { return esc_url_raw( $_REQUEST['redirect_to'] ); } return $redirect_to; }
第三步:ARMember配置校验
进入ARMember常规设置的重定向页面,确认以下配置:
- 开启「优先使用引荐链接作为重定向目标」选项
- 不要勾选「强制所有登录用户跳转到固定地址」的开关
第四步:生效校验
保存代码后清空WordPress全站缓存、浏览器缓存,分别测试未登录状态下访问/shop、/cart、/myaccount页面,跳转登录后即可自动回到对应访问地址。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

