You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:56:02