如何实现WooCommerce未登录用户结账重定向登录后返回结账页?
解决WooCommerce未登录用户结账页登录后重定向回原页面的问题
你之前的代码仅实现了未登录用户跳转至登录页的逻辑,但未携带结账页的跳转目标参数,导致登录后无法回到结账页面。可以通过以下两种方式修改代码:
方法1:使用WordPress内置函数生成带跳转参数的登录URL(推荐)
利用wp_login_url()函数自动生成包含redirect_to参数的登录链接,它会自动处理URL编码和站点验证,避免参数失效:
add_action( 'template_redirect', 'redirect_checkout_to_login_with_return' ); function redirect_checkout_to_login_with_return() { if ( is_page('finalizar-compra') && ! is_user_logged_in() ) { // 获取当前结账页的完整URL $return_url = get_permalink(); // 生成带跳转目标的登录URL $login_url = wp_login_url( $return_url ); // 使用302临时重定向(更符合临时跳转场景,301永久重定向不适用此需求) wp_redirect( $login_url, 302 ); exit; } }
方法2:手动构建带编码参数的登录URL
如果需要手动拼接URL,必须对跳转目标URL进行编码,确保参数能被WordPress正确识别:
add_action( 'template_redirect', 'redirect_checkout_to_login_with_return' ); function redirect_checkout_to_login_with_return() { if ( is_page('finalizar-compra') && ! is_user_logged_in() ) { $return_url = urlencode( get_permalink() ); $login_url = 'https://miweb.pe/login/?redirect_to=' . $return_url; wp_redirect( $login_url, 302 ); exit; } }
为什么之前手动添加redirect_to参数无效?
手动拼接的URL如果未对redirect_to的值进行URL编码,或者目标域名与站点配置不匹配,WordPress会直接忽略该参数,导致跳转逻辑失效。使用wp_login_url()函数可自动规避这些问题。
替换你之前在主题functions.php中的代码即可生效,建议修改前备份主题文件。
内容的提问来源于stack exchange,提问作者Abaol
相关产品推荐
相关产品推荐

