wp_safe_redirect()
Définition : wp_safe_redirect() émet une redirection HTTP WordPress après vérification de la destination selon la liste des hôtes autorisés. Elle aide à éviter les redirections ouvertes vers des sites non approuvés.
Terminologie
Terme officiel : wp_safe_redirect()
Autres appellations : Redirection locale sécurisée
À quoi cela sert
Elle permet de ramener un administrateur sur un écran connu après un traitement de formulaire, sans accepter aveuglément une destination fournie par la requête.
Comment cela fonctionne
WordPress filtre la destination, vérifie l’hôte et demande une redirection HTTP. La fonction ne termine pas le script : un appel à exit est généralement nécessaire juste après une redirection réussie.
Dans quel contexte l’utiliser
À employer après une action POST administrative réussie, lorsqu’une navigation vers un écran local doit suivre l’opération.
Exemple concret
Une extension traite un formulaire de classement et retourne ensuite vers la liste des fiches sans ouvrir une URL fournie par un tiers.
Exemple de code commenté
Extrait pédagogique PHP pour extension WordPress : adapter au contexte et tester sur un environnement de développement avant tout usage.
<?php
// Exemple dans un handler POST, après contrôles et sauvegarde.
if ( current_user_can( 'manage_options' ) ) {
// Le nonce et les données doivent déjà être vérifiés.
$url = admin_url( 'admin.php?page=atoolpha-fiches' );
if ( wp_safe_redirect( $url, 303 ) ) {
exit;
}
}
// Sinon, traiter explicitement le refus ou l’échec.
Explication pas à pas de l’exemple
1. Les droits sont vérifiés. 2. La cible est construite avec admin_url() et non depuis un paramètre arbitraire. 3. wp_safe_redirect() vérifie la destination. 4. Un code 303 permet de suivre le POST par une requête GET.
Résultat attendu
Après une opération terminée et autorisée, le navigateur est redirigé vers l’écran d’administration prévu.
Mise en pratique guidée
Dans un handler POST de test, rediriger vers une URL construite par admin_url(), puis examiner le statut 303 et la requête GET qui suit. Essayer une destination externe non autorisée seulement sur une installation de développement pour observer le comportement de sécurité. Vérifier qu’aucun contenu n’a été envoyé avant les en-têtes.
Précautions et limites
Les réponses HTTP exigent que les en-têtes ne soient pas déjà envoyés. Vérifier nonce et capacités avant toute modification ; wp_safe_redirect() ne dispense d’aucune protection de formulaire.
À ne pas confondre
wp_safe_redirect() vérifie l’hôte de destination ; esc_url() prépare une URL affichée dans HTML ; wp_redirect() n’applique pas le même contrôle d’hôtes.
Termes associés
- esc_url()
- check_admin_referer()
