« template_redirect » : Le hook de la semaine n°1

« template_redirect » : Le hook de la semaine n°1

Intro

N°1 de la série des hooks et fonctions de la semaine, nous allons voir ensemble le hook action template_redirect.

Pour ceux qui ont encore du mal avec les hooks, lisez d’abord le hook de la semaine n°0.

Définition

Tentons de définir ce hook avant de l’utiliser :

Déjà , on le trouve ici : /wp-includes/template-loader.php en ligne 7. C’est le seul endroit où on va le trouver dans tout WordPress. Parfois certains hooks sont déclenchés à plusieurs endroits, celui-ci non, et c’est logique, vous allez comprendre.

Ce fichier /wp-includes/template-loader.php est appelé par le fichier /wp-blog-header.php qui est un bootstrap WordPress. Ce hook n’est donc pas déclenché lors de l’utilisation du bootstrap /wp-load.php qui ne charge pas ce fichier de templating. Aussi la constante WP_USE_THEMES doit être à vrai, travail qui est fait par /wp-blog-header.php justement.

L’avez vous donc remarqué ? Si vous chargez l’administration, ce hook ne se déclenche donc pas ! C’est bien un hook que je dirais « front-end ».

Si vous souhaitez en savoir plus sur les constantes, lisez ceci.

Utilisation

Pourquoi l’utiliser ?

template_redirect est un des derniers hooks qui se déclenche avant l’apparition des headers. Il est important de le savoir, car une fois les headers envoyés, vous ne pouvez plus toucher aux cookies ou faire une redirection serveur (entendez avec header() et non pas une <meta> ou du JS).

Vous pouvez donc l’utiliser pour réaliser toute action qui nécessite d’être faite avant les headers. Le plus souvent, et son nom est parlant, pour faire des redirections.

Pourquoi utiliser template_redirect et pas init ? Et bien à cause de ce qui est chargé déjà , mais aussi, init touche l’administration ! Inutile de devoir coder un if( !is_admin() ), init n’est pas fait pour ça, c’est tout. Rien ne vous empêche de le faire, mais ce n’est pas une bonne pratique.

Comment l’utiliser ?

L’avez-vous déjà utilisé ? A bon escient ? N’oubliez pas que la partie administration n’est pas touchée. Voici ce qu’on peut faire de simple avec :

Si la recherche ne retourne qu’un seul résultat, alors on redirige le visiteur sur cet article, c’est bien template_redirect qu’il fallait utiliser, bravo Jean-David 😉

Retrouvez cette astuce chez GeekPress : http://www.geekpress.fr/wordpress/astuce/rediriger-vers-article-recherche-resultat-unique-1207/

Des idées ?

Ce hook est très puissant vous pourriez :

  • Empêcher les membres connectés se charger l’administration pour les rediriger sur une page profile en front,
  • Lire les paramètres passés en $_GET, $_POST, $_REQUEST, et selon vos conditions rediriger la personne,
  • Empêcher les pages auteurs d’être visitées ou tout autre page si le visiteur n’est pas connecté,

Les idées ne manquent pas, vous en avez d’autres ?

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum