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

WooCommerce指定注册表单重定向至我的账户页问题求助

解决多WooCommerce注册表单定向问题

问题根源

你原有代码存在两个核心问题:

  1. 钩子参数声明不匹配:woocommerce_registration_redirect支持2个参数,但你写了10, 1,导致$user参数无法正确传递
  2. 判断逻辑错误:$reg_url是默认重定向地址,而非用户提交注册的来源页面,用它判断目标表单完全无效

修正后的解决方案

要区分不同注册表单,可通过来源页面URL或表单隐藏字段实现,以下是两种可行方案:

方案1:通过来源页面URL判断

如果目标注册表单所在页面的URL包含login-or-register,使用此方案:

add_filter( 'woocommerce_registration_redirect', 'custom_registration_redirect', 10, 2 );
function custom_registration_redirect( $redirect_url, $user ) {
    // 获取用户提交注册的来源页面URL
    $referrer = wp_get_referer();
    
    // 检查来源页面是否包含目标标识字符串
    if ( $referrer && str_contains( $referrer, 'login-or-register' ) ) {
        // 重定向到"我的账户"页
        $redirect_url = get_permalink( wc_get_page_id( 'myaccount' ) );
    }
    
    return $redirect_url;
}

方案2:通过表单隐藏字段判断(更可靠)

若来源URL无法准确区分,给目标注册表单添加一个隐藏字段:

<input type="hidden" name="custom_reg_redirect" value="myaccount">

再用以下代码处理定向逻辑:

add_filter( 'woocommerce_registration_redirect', 'custom_registration_redirect', 10, 2 );
function custom_registration_redirect( $redirect_url, $user ) {
    // 检查表单是否提交了自定义隐藏字段
    if ( isset( $_POST['custom_reg_redirect'] ) && $_POST['custom_reg_redirect'] === 'myaccount' ) {
        $redirect_url = get_permalink( wc_get_page_id( 'myaccount' ) );
    }
    
    return $redirect_url;
}

注意事项

  • 将代码添加到子主题的functions.php文件末尾,或使用代码片段插件导入
  • 测试前清空浏览器缓存,避免旧缓存干扰结果
  • 确保当前激活的是子主题,不要直接修改父主题文件

内容的提问来源于stack exchange,提问作者Kokab Hasnain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:45:53