WP登录重定向从URL中剥离参数

时间:2018-01-10 作者:Nori

If i write http://domain.com/wp-login.php?redirect_to=http://domain.com/specificpage/?parameter1=dog&parameter2=dog&parameter3=cat 在url地址栏中(使登录页面重定向到具有参数的特定页面)并登录。

I get 已重定向到右侧页面,但仅使用第一个参数(http://domain.com/specificpage/?parameter1=dog). 其他两个参数将从url中剥离。

我怎样才能解决这个问题?

顺便说一句,此站点上的参数是可接受的(在函数文件中使用add_custom_query_vars 所以这不是问题)

2 个回复
最合适的回答,由SO网友:Pat_Morita 整理而成

我认为您应该对&;进行编码;为避免潜在冲突:

http://domain.com/wp-login.php?redirect_to=http://domain.com/specificpage/?parameter1=dog&parameter2=dog&parameter3=cat

SO网友:Flimm

选项1:使用wp_login_url($redirect):

wp_login_url 接受参数$redirect 这将正确生成redirect_to 查询参数编码正确:

echo \'<a href="\' . esc_attr( wp_login_url( "http://domain.com/specificpage/?parameter1=dog&parameter2=dog&parameter3=cat" ) ) . \'">test</a>\';
这将打印:

<a href="http://example.com/wp-login.php?redirect_to=http%3A%2F%2Fdomain.com%2Fspecificpage%2F%3Fparameter1%3Ddog%26parameter2%3Ddog%26parameter3%3Dcat">test</a>
如你所能,特殊角色如?& 使用获取编码percent encoding%3F%26 分别(不是HTML实体,如&amp; 如另一个答案所示)。

选项2:使用http_build_query:

如果您不想使用wp_login_url 但是,作为一种更通用的工具,通常适用于搜索查询,您可以使用PHP的http_build_query 而是这样:

echo \'<a href="http://example.com/wp-login.php?\' . esc_attr( http_build_query([\'redirect_to\' => \'http://domain.com/specificpage/?parameter1=dog&parameter2=dog&parameter3=cat\']) ) . \'">test</a>\';
这将打印:

<a href="http://example.com/wp-login.php?redirect_to=http%3A%2F%2Fdomain.com%2Fspecificpage%2F%3Fparameter1%3Ddog%26parameter2%3Ddog%26parameter3%3Dcat">test</a>

结束