Création d’un plugin WordPress : les Hooks

wordpress-logo1

Suite au premier article, vous deviez avoir un fichier PHP contenant, en en-tête, les informations relatives à votre plugin. Aujourd’hui, nous allons voir une partie importante, peut être même la plus importante, du fonctionnement des plugins WordPress : les hooks. En effet, c’est grâce à eux que vous allez pouvoir restreindre le champs d’application d’une fonction PHP, que vous aurez créée, à un événement précis. Certaines parties de votre code n’auront, par exemple, besoin d’être exécutée que lors de l’installation du plugin (la création d’une table dans la base de données, …). Même si vous pouvez grâce à une condition vérifier que la table n’existe pas avant de la créer, un hook s’avérera toujours utile, puisqu’il vous permettra d’économiser de la ressource. Cela réduira donc le temps de chargement de vos pages.

Il existe deux types de hooks : les hooks d’action et les hooks de filtre. Il faudra faire bien attention lors du choix du hook puisque vos fonctions auront un résultat différent en fonction du type de hook que vous aurez utilisé. Les hooks de filtre vont être utile pour permettre au plugin de modifier des parties du blog déja existante (le titre des articles, le contenu, …). En revanche, les hooks d’actions vont permettre d’effectuer une tâche (la fonction que vous aurez programmé) à un moment précis (au démarrage du loop, juste avant la fin du loop, …). Pour utiliser un hook de filtre, vous devez écrire :

add_filter('nom_du_hook', 'nom_de_la_fonction');

Les hooks de filtre s’utilisent de la même manière, mais vous devez remplacer add_filter par add_action ou do_action. Si le hook que vous voulez utiliser, pour que la fonction soit appelée au bon moment, ne correspond pas au type (action ou filtre) que vous voulez, vous pouvez inclure un hook dans une fonction et y faire ensuite appel via un deuxième hook :

function exemple1 {
    if (condition) {
        add_filter('the_content','fonction_a_appliquer');
    }
}
 
add_action('loop_start', 'exemple1');

La condition n’est pas obligatoire, et le premier hook appelle fonction_a_appliquer que je n’ai pas détaillé ici, mais qui pourrait être n’importe quelle fonction. Vous pourrez trouver une liste exhaustive des différents hooks de WordPress à cette adresse. Les hooks sont classé par ordre alphabétique. Pour chacun le type est précisé (action ou filtre), une case vous informe de la version de WordPress qui l’a vu apparaitre. D’autres informations utiles sont présentes (vous pouvez s’avoir si un hook a changer de nom, s’il n’est plus recommandé de l’utiliser : DEPRECATED, …).

Si, pour une raison ou une autre, vous souhaitez qu’une fonction soit executé au démarrage du loop, par exemple, sauf dans un cas précis vous pouvez utiliserla synthaxe suivante :

remove_filter('nom_du_hook', 'nom_de_la_fonction');

Il faudra, bien sûr, remplacer remove_filter par remove_action si la fonction que l’on ne souhaite pas exécuter était introduite par un hook d’action.

Pour les fonctions d’initialisation du plugin (comme celles à exécuter lors de sa désactivation) on utilise des fonction PHP qui sont légèrement différentes des hooks. En effet, elles se comportent quasiment de la même façon, mais on ne débute pas la ligne de code par add_afilter ou add_action. En revanche, vous allez spécifier ce que vous souhaitez faire : initialisation d’un plugin, … Dans la parenthèse, vous devez spécifier quel fichier doit être exécuter lorsque WordPress va initialiser le plugin, puis le nom des fonctions à l’intérieur de ce fichier.

register_activation_hook( __FILE__, array('WP_FaceThumb', 'plugin_install'));

Ne vous inquiétez pas de voir un array ici, c’est juste que, dans mon code, j’ai créé une classe WP_FaceThumb, et je fais appel à la fonction plugin_install qu’elle contient.

Mots-clefs : , , , ,

Un commentaire sur “Création d’un plugin WordPress : les Hooks”

  1. [...] de les modifier. Pour cela, nous allons créer une fonction qui crée les menu et sous-menu. Le hook se chargera d’appeler la fonction au bon moment de l’exécution de WordPress: function [...]

Laisser une réponse