Quel hook doit être utilisé pour ajouter une action contenant une redirection?


16

Je veux créer un plugin 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 de plugins WordPress professionnel, mais je ne sais pas quel crochet 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?


Voulez-vous réellement modifier l'URL finale ou simplement les variables utilisées dans WP_Query?
scribu

Le code que vous avez publié redirigerait essentiellement chaque page, c'est ce que vous voulez? Dans quelles conditions cette redirection doit-elle se produire? NOTE: J'ai de toute façon + 1 kaiser, template_redirectserait également ma suggestion.
t31os

scribu, je veux changer l'url finale et la chaîne de requête.
jnthnclrk

t31os, j'ai simplifié mon code pour la question. La vraie chose contient plus de conditions.
jnthnclrk

Quel a été le résultat? Marquez une solution pls.
kaiser

Réponses:



17

Je dirais template_redirect. Mais jetez un oeil à la référence d'action .

Exemple

N'oubliez pas de exit()rediriger.

/**
 * 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' );

8

Mais je dirais que cet exemple de kaiser ne peut pas fonctionner, car après une redirection, ce hook template_redirect fonctionne encore et encore, vous aurez un transfert 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');

Ça marche bien pour moi. Aucune suggestion? Cordialement!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.