Quel hook faut-il utiliser pour ajouter une action contenant une redirection?

12

Je souhaite créer un plug-in qui récupère certains paramètres d'URL de la chaîne de requête pour créer une nouvelle chaîne de requête pour la même page. Je suis l'excellent livre de développement professionnel WordPress Plugin, mais je ne suis pas sûr du hook à utiliser pour cette action. Voici ma fonction d'action:

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

Quels crochets conviennent aux redirections d'en-tête?

    
posée jnthnclrk 20.03.2011 - 13:26

3 réponses

10

Comme kaiser a répondu, template_redirect hook est en effet approprié pour les redirections.

Vous devez également utiliser la fonction wp_redirect() , plutôt que de définir un en-tête.

    
réponse donnée Rarst 20.03.2011 - 15:05
15

Je dirais template_redirect . Mais jetez un coup d’œil à la Référence de l’action .

Exemple

N'oubliez pas de exit() lors de la redirection.

/**
 * This example redirects everything to the index.php page
 * You can do the same for the dashboard with admin_url( '/' );
 * Or simply base the redirect on conditionals like 
 * is_*() functions, current_user_can( 'capability' ), globals, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( '/' ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );
    
réponse donnée kaiser 20.03.2011 - 14:59
6

Mais je dirais que cet exemple tiré de kaiser ne peut pas fonctionner car après une redirection, ce hook template_redirect fonctionne encore et encore, vous obtiendrez une transmission sans fin !

Mieux vaut vérifier si vous êtes déjà sur la page d'accueil, comme ceci:

function wpse12535_redirect_sample() {

    $current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $site_url = get_bloginfo('siteurl') . "/";

    if($current_url != $site_url)       
      exit( wp_redirect( home_url( '/' ) ));    

}
add_action( 'template_redirect', 'wpse12535_redirect_sample');

Fonctionne bien pour moi. Aucune suggestion? Cordialement!

    
réponse donnée Alex 25.09.2013 - 14:28

Lire d'autres questions sur les étiquettes