Hooks

image_pdf

Un hook WordPress, peut-être de deux types : “action” ou “filtre“, il s’agit d’un mécanisme intégré dans le noyau de WordPress qui permet aux développeurs d’interagir avec le système et d’étendre ou de modifier son fonctionnement sans modifier directement le code principal.

Les hooks sont essentiels pour personnaliser et étendre les fonctionnalités de WordPress de manière modulaire et robuste.

Il existe deux types de hooks dans WordPress : les actions (actions hooks) et les filtres (filter hooks).

  • Action hooks : permettent aux développeurs d’exécuter leur propre code à des points spécifiques de l’exécution de WordPress. Ils agissent comme des points d’ancrage où vous pouvez attacher vos propres fonctions personnalisées. Par exemple, l’action “init” est déclenchée au démarrage de WordPress, et vous pouvez y attacher une fonction personnalisée pour effectuer certaines tâches d’initialisation.
  • Filter hooks : modifier les données avant qu’elles ne soient affichées ou enregistrées dans la base de données. Ils fournissent une méthode pour filtrer ou modifier les données de WordPress avant qu’elles ne soient utilisées. Par exemple, le filtre “the_content” permet de modifier le contenu d’un article avant qu’il ne soit affiché à l’utilisateur.

Les hooks sont utilisés dans les thèmes WordPress et les plugins pour ajouter de nouvelles fonctionnalités, modifier des fonctionnalités existantes, manipuler des données et exécuter des actions personnalisées à des moments spécifiques du flux d’exécution de WordPress.

Nativement + de 2300 hooks dans le cœur du CMS WordPress.

Pour utiliser un hook, vous devez attacher une fonction personnalisée à ce hook à l’aide de fonctions spécifiques fournies par WordPress, telles que “add_action” pour les actions hooks et “add_filter” pour les filtres hooks.

Ces fonctions prennent en paramètre le nom du hook et le nom de la fonction à exécuter.

L’ordre d’exécution des hooks du front

HookDescription
mu_plugin_loadedAprès chargement des mu-plugins
plugins_loadedAprès que les extensions soient chargées
after_setup_themeAprès que le fichier functions.php du thème soit chargé
Beaucoup de fonctionnalités du thème sont déclarées à ce moment-là à l’aide de add_theme_support()
initWordPress est en grande partie chargé (thème et extensions, l’utilisateur est authentifié et disponible)Utilisé pour déclarer les CPT, taxonomies, …
wp_loadedWordPress est complètement chargé, mais la requête n’a pas encore été traitée
parse_requestLes variables de la requête HTTP entrante sont interprétées
send_headersLes entêtes HTTP sont envoyées
parse_queryLes variables pour la requête principale WP_Query sont prêtesLa requête pour aller chercher le bon contenu n’est pas encore faite
pre_get_postsHook permettant de manipuler la requête WP_Query avant qu’elle ne soit effectuée
wpL’objet $wp est complet
template_redirectExécuté avant que WordPress ne cherche le bon modèle de page dans le thème pour afficher le contenu
get_headerJuste avant de charger header.php
wp_enqueue_styleswp_enqueue_scriptsHook sur lequel se greffer pour ajouter des styles et scripts à charger
wp_headUtiliser ce hook pour écrire dans la balise <head> de la page
wp_print_styleswp_print_scriptsSe déclenchent juste avant d’afficher les balises <link> et <script> dans le <head>
the_postSe déclenche quand l’objet $post est prêt
pre_get_commentsDéclenché juste avant d’aller chercher les commentaires
get_sidebarAvant que le modèle pour la zone de widget soit chargée
get_footerAvant d’aller chercher footer.php
wp_footerDéclenché dans le pied de page pour charger les balises <script> des extensions
admin_bar_menuCharge le menu de la barre d’administration
shutdownJuste avant que l’exécution de PHP s’arrête

Astuces : les hooks peuvent être appelés directement depuis votre template ….

  • hook d’action grâce à la fonction do_action(‘nomdevotrehook’)
  • hook de filtre grâce à la fonction apply_filters(‘nomdevotrehook’)

Hooks : paramètres et exemples

Les paramètres

  • étiquette : nom de l’action à cibler
  • callback : fonction appelée
  • priorité : permet de gérer l’ordre d’exécution dans le cas où il y aurait plusieurs fonctions greffées sur ce hook — priorité inférieure = action appelée avant (par défaut à 10)

Exemples

admin_menu

Ex. supprimer des menus du Tableau de bord WordPress via la fonction remove_menu_page()

wp_body_open

Ex. insérer le code de suivi Google Tag Manager

wp_head

Ex. ajouter le code de suivi Google Analytics

pre_get_posts

Ex. modifier le retour d’une recherche, en ajoutant la possibilité de chercher dans un CPT (ici ‘recipe’ pour des recettes de cuisine)

body_class

Ex. ajouter une classe CSS dans le body

save_post

Le hook save_post est un hook d’action de base de WordPress qui est déclenché chaque fois qu’un article ou une page est enregistré dans la base de données.

Vous pouvez utiliser ce hook pour effectuer des actions spécifiques lorsque le contenu est sauvegardé, modifié ou publié.

add_action('save_post', 'mon_action_apres_enregistrement', 10, 3);

function mon_action_apres_enregistrement($post_id, $post, $update) {
  // votre code ici pour effectuer des actions après l'enregistrement du contenu

  // pour éviter d'exécuter le code en cas d'enregistrement d'une révision
  if( wp_is_post_revision( $post_id ) ) { return; }

  // pour éviter d'exécuter le code en cas de sauvegardes automatiques
  if( defined( 'DOING_AUTOSAVE' ) and DOING_AUTOSAVE ) { return; }

  // vérifier si l'action est un enregistrement initial ou une mise à jour
  if ($update) {
    // c'est une mise à jour
  } else {
    // c'est un nouvel enregistrement
    // définir les termes de taxonomie personnalisée pour le nouvel article ici
    $term_ids = array(1, 2, 3); // remplacez par les ID des termes de taxonomie souhaités
    $taxonomy = 'ma_taxonomie'; // remplacez par le slug de votre taxonomie personnalisée ou 'category'
    wp_set_post_terms($post_id, $term_ids, $taxonomy);
  }

  // récupérer le type de contenu (post_type)
  $post_type = get_post_type($post_id);

  // faire des actions spécifiques en fonction du type de contenu
  if ($post_type === 'post') {
    // actions spécifiques aux articles
  } elseif ($post_type === 'page') {
    // actions spécifiques aux pages
  }

  // récupérer les données du formulaire et les traiter
  if (isset($_POST['mon_champ'])) {
    $valeur_champ = sanitize_text_field($_POST['mon_champ']);
    // faire quelque chose avec $valeur_champ
  }
}

Le hook save_post reçoit trois paramètres :

  • $post_id : l’ID de l’article ou de la page qui est enregistré.
  • $post : l’objet post contenant les données de l’article ou de la page.
  • $update : un booléen indiquant s’il s’agit d’une mise à jour (true) ou d’un nouvel enregistrement (false).

Rappel : les révisions sont des sauvegardes automatiques créées par WordPress chaque fois qu’un article ou une page est modifié et sauvegardé.

Remarque : l’autosave (sauvegarde automatique) est une fonctionnalité WordPress qui permet de sauvegarder automatiquement les contenus en cours d’édition, à intervalles réguliers pendant que vous les rédigez.

Désactiver un hook

Pour désactiver un hook WordPress, vous pouvez utiliser la fonction remove_action() pour les actions hooks ou remove_filter() pour les filtres hooks.

Si la fonction a été attachée à l’action hook avec une priorité spécifique (différente de 10 qui est la valeur par défaut), indiquez la même priorité utilisée lors de l’ajout de la fonction à l’action hook. Sinon, vous pouvez omettre ce paramètre.

On stoppe l’exécution d’une fonction préalablement hookée.

La fonction en paramètre ne s’exécutera pas, elle est retirée de la liste d’attente.

Assurez-vous d’appeler les fonctions remove_action() et remove_filter() dès que le hook que vous souhaitez désactiver a été ajouté, par exemple dans le fichier functions.php de votre thème ou dans un plugin.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.