WooCommerce指定注册表单重定向至我的账户页问题求助
解决多WooCommerce注册表单定向问题
问题根源
你原有代码存在两个核心问题:
- 钩子参数声明不匹配:
woocommerce_registration_redirect支持2个参数,但你写了10, 1,导致$user参数无法正确传递 - 判断逻辑错误:
$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
相关产品推荐
相关产品推荐

