WordPress登录重定向丢失URL参数问题求助
解决WordPress登录重定向丢失多参数的问题
这个问题我之前也碰到过——虽然你已经通过add_custom_query_vars注册了参数,但WordPress默认的登录重定向逻辑在处理带HTML转义参数(比如&)的redirect_to时,很容易把后续参数截断。我们可以通过login_redirect钩子手动接管重定向过程,确保所有需要的参数都被完整传递。
具体解决方案
把下面的代码添加到你的主题functions.php文件中:
// 确保自定义查询变量已注册(如果还没加的话) add_filter( 'query_vars', 'add_custom_query_vars' ); function add_custom_query_vars( $vars ) { $vars[] = 'parameter1'; $vars[] = 'parameter2'; $vars[] = 'parameter3'; return $vars; } // 自定义登录重定向,保留所有需要的参数 add_filter( 'login_redirect', 'custom_login_redirect_with_all_params', 10, 3 ); function custom_login_redirect_with_all_params( $redirect_to, $requested_redirect_to, $user ) { // 只处理用户明确请求的重定向地址 if ( ! empty( $requested_redirect_to ) ) { // 解码HTML转义的&符号,避免参数被错误解析 $decoded_redirect = htmlspecialchars_decode( $requested_redirect_to ); // 拆分URL结构,提取查询参数部分 $url_parts = wp_parse_url( $decoded_redirect ); if ( isset( $url_parts['query'] ) ) { // 将查询字符串解析为关联数组 parse_str( $url_parts['query'], $query_params ); // 筛选出我们需要保留的参数(可根据需求调整) $required_params = array( 'parameter1', 'parameter2', 'parameter3' ); $filtered_params = array_intersect_key( $query_params, array_flip( $required_params ) ); // 重新构建合法的查询字符串 $new_query_string = http_build_query( $filtered_params ); // 组合成完整的目标重定向URL $redirect_to = sprintf( '%s://%s%s?%s', $url_parts['scheme'], $url_parts['host'], $url_parts['path'], $new_query_string ); } } return $redirect_to; }
代码说明
- 注册查询变量:第一部分代码确保WordPress能识别你需要的三个参数,如果之前已经添加过这部分,可以跳过,但保留也不会有问题。
- 接管重定向逻辑:
- 我们使用
login_redirect钩子,它允许我们修改登录后的最终重定向地址。 - 首先对
requested_redirect_to进行HTML解码,把地址栏里的&转成标准的&,这样parse_str才能正确解析所有参数。 - 拆分URL并解析查询参数,筛选出我们需要保留的三个参数,再重新构建成合法的查询字符串。
- 最后组合成完整的URL返回,这样登录后就会跳转到带所有参数的目标页面了。
- 我们使用
测试验证
现在重新访问你的登录URL:http://example.com/wp-login.php?redirect_to=http://example.com/specificpage/?parameter1=dog&parameter2=dog&parameter3=cat,登录后应该会正确跳转到http://example.com/specificpage/?parameter1=dog¶meter2=dog¶meter3=cat,所有参数都不会丢失。
内容的提问来源于stack exchange,提问作者Nori
相关产品推荐
相关产品推荐

