Si j'écrishttp://domain.com/wp-login.php?redirect_to=http://domain.com/specificpage/?parameter1=dog¶meter2=dog¶meter3=cat
dans la barre d'adresse de l'URL (pour que la page de connexion soit redirigée vers une page spécifique avec des paramètres) et connecte-toi.
Je reçois redirigé vers la bonne page mais uniquement avec le premier paramètre (http://domain.com/specificpage/?parameter1=dog
). les deux autres paramètres sont supprimés de l'URL.
Comment puis-je résoudre ça?
Btw - les paramètres sont acceptables sur ce site (définis dans le fichier de fonctions avec add_custom_query_vars
, ce n'est donc pas le problème).
Je pense que vous devriez encoder le & pour éviter des conflits potentiels:
http://domain.com/wp-login.php?redirect_to=http://domain.com/specificpage/?parameter1=dog&parameter2=dog&parameter3=cat
wp_login_url($redirect)
:wp_login_url
prend un argument $redirect
qui générera correctement le paramètre de requête redirect_to
correctement codé:
echo '<a href="' . esc_attr( wp_login_url( "http://domain.com/specificpage/?parameter1=dog¶meter2=dog¶meter3=cat" ) ) . '">test</a>';
Cela imprimerait:
<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>
Comme vous le pouvez, les caractères spéciaux tels que ?
et &
sont encodés en utilisant encodage en pourcentage en %3F
et %26
(respectivement, pas une entité HTML telle que &
comme une autre réponse suggérée).
http_build_query
:Si vous ne voulez pas utiliser wp_login_url
mais un outil plus général qui s'applique aux requêtes de recherche en général, vous pouvez utiliser le PHP http_build_query
, comme ceci:
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>';
Cela imprimerait:
<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>