Option 1: Using wp_login_url($redirect)
:
wp_login_url
takes an argument $redirect
that will correctly generate the redirect_to
query parameter correctly encoded:
echo '<a href="' . esc_attr( wp_login_url( "http://domain.com/specificpage/?parameter1=dog¶meter2=dog¶meter3=cat" ) ) . '">test</a>';
This would print:
<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>
As you can, special characters like ?
and &
get encoded using percent encoding to %3F
and %26
respectively (not an HTML entity like &
as another answer suggested).
Option 2: Using http_build_query
:
If you didn't want to use wp_login_url
but a more a general tool that applies to search queries in general, you can use PHP's http_build_query
instead, like this:
echo '<a href="http://example.com/wp-login.php?' . esc_attr( http_build_query(['redirect_to' => 'http://domain.com/specificpage/?parameter1=dog¶meter2=dog¶meter3=cat']) ) . '">test</a>';
This would print:
<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>