J'ai examiné l'API de plug-in un peu plus en profondeur récemment et je me demandais quelles différences réelles il y avait entre les crochets de filtre et d'action . Ce sont tous les deux des événements qui reçoivent des données en tant que paramètre et ils semblent tous deux capables de faire la même chose.
Évidemment, je vois que les actions sont appelées lorsque des actions ont lieu et que les filtres sont appelées lorsque des données sont manipulées, mais cela semble être simplement une différence de dénomination sémantique.
Outre la sémantique et à quoi elles servent, quelles sont les véritables différences entre elles?
Bonjour @Sruly :
Vous avez à peu près répondu à votre propre question, mais je vais élaborer un peu.
Les actions Hooks sont destinées à être utilisées lorsque le noyau de WordPress, un plugin ou un thème vous donne l’opportunité d’insérer votre code à un moment donné et d’effectuer une ou plusieurs des actions suivantes:
echo
pour injecter du contenu HTML ou autre contenu dans le tampon de réponse,do_action_ref_array()
au lieu de do_action()
car ce dernier ne prend pas en charge le passage de variables par référence .)Crochets de filtre se comportent de manière très similaire à Action Hooks mais leur utilisation prévue consiste à recevoir une valeur et à éventuellement renvoyer une version modifiée de la valeur. Un crochet de filtre peut également être utilisé comme un crochet d’action, c’est-à-dire pour modifier une variable globale ou générer du HTML, en supposant que c’est ce que vous devez faire lorsque le crochet est appelé. Une chose qui est très importante à propos des crochets de filtre et dont vous n'avez pas à vous soucier avec Action Hook est que la personne qui utilise un crochet de filtre doit renvoyer (une version modifiée de) le premier paramètre c'était passé. Une erreur courante chez les débutants est d'oublier de renvoyer cette valeur!
En aparté J'avais le sentiment que les crochets de filtre étaient entravés dans les versions précédentes de WordPress, car ils ne recevraient qu'un paramètre; c'est-à-dire qu'ils obtiendraient une valeur à modifier, mais aucun deuxième ou troisième paramètre pour fournir un contexte. Dernièrement et positivement, il semble que l’équipe principale de WordPress ait ajouté (pour moi) avec joie des paramètres supplémentaires à Filter Hooks afin que vous puissiez découvrir plus de contexte. Un bon exemple est le crochet posts_where
; Je crois que quelques versions en arrière n’acceptaient qu’un seul paramètre: "where" class SQL de la requête actuelle, mais maintenant, il accepte à la fois la clause where et une référence à une instance courante de la classe WP_Query
c'est invoquer le crochet.
En réalité, les Filter Hooks sont un super ensemble de Action Hooks. Le premier peut faire tout ce que le dernier peut faire et un peu plus, mais le développeur n'a pas la responsabilité de renvoyer une valeur avec le crochet d'action qu'il fait avec le crochet de filtre.
Mais ce n'est probablement pas ce qui est important. Je pense que ce qui est important, c’est que si un développeur choisit d’utiliser un crochet d’action ou un crochet de filtre ou inversement, il télégraphie son intention et donc donne des conseils au développeur ou au plug-in qui pourrait être en utilisant le crochet. Essentiellement, ils disent soit "Je vais vous appeler, faites ce que vous devez faire" OU "Je vais vous transmettre cette valeur à modifier mais assurez-vous de la renvoyer . "
Donc, finalement Je pense que les conseils fournis par le choix du type d’hameçon constituent la valeur réelle de la distinction . OMI, de toute façon.
J'espère que cela t'aides!
Si vous regardez le source de la fonction principale add_action()
, c'est juste un wrapper pour la fonction add_filter()
...
Et si vous regardez la fonction principale do_action()
, elle est très similaire à la fonction principale apply_filters()
, avec une différence essentielle: elle ne renvoie pas de valeur.
Qu'est-ce que cela signifie? les actions sont comme des filtres, sauf qu'une action ne renvoie pas de valeur, vous ne pouvez donc pas modifier les données. Cela montre qu'il était simple de créer le mécanisme d'action de WordPress en copiant simplement le mécanisme de filtre et en ne renvoyant pas de valeur. En gros, tout ce que vous pouvez faire avec une action est simplement d’exécuter une fonction sans modifier une valeur.
Dans Word simple.
Les actions sont les PHP fonctions qui exécutent la sortie.
Les filtres sont ces PHP fonctions qui renvoient la sortie.
Mise à jour: Nous pouvons étendre n'importe quel plugin qui utilise les actions et les filtres sans modifier le code. En ajoutant des filtres et des actions dans notre propre thème ou plugin.
Consultez ci-dessous des exemples simples dans votre fichier thème functions.php
.
test de fonction () { écho "Sortie"; } test ();
Au-dessus du programme, imprimez la sortie:
Sortie
[NOTE: Ici test () appelle simplement la fonction. Et exécutez la fonction de rappel 'test'.]
function test1 () { echo "Sortie"; } add_action ('test', 'test1'); do_action ('test');
Au-dessus du programme, imprimez la sortie:
Sortie
[NOTE: Ici, do_action('test')
fonctionne comme une fonction d’appel. Et exécutez la fonction de rappel 'test1'.]
function test2 () { echo "Test 2"; } add_action ('test', 'test2', 1); function test1 () { echo "Test 1"; } add_action ('test', 'test1', 2); do_action ('test');
Au-dessus du programme, imprimez la sortie:
Test 2Test 1
[NOTE: Ici, do_action('test')
fonctionne comme une fonction d’appel. Et exécuter des fonctions de rappel sur ses priorités.
La fonction de rappel 'test1' a la priorité 2 et 'test2' a la priorité 1.]
Si les priorités changent comme 'test1' avec priorité 1 et 'test2' avec priorité 2, la sortie sera:
Test 1Test 2
functions.php
function test1 () { do_action ('test_before'); echo "Test 1"; do_action ("test_after"); } add_action ('test', 'test1'); do_action ('test');
Au-dessus du programme, imprimez la sortie:
Test 1
Créez maintenant un exemple de plug-in pour vérifier son fonctionnement pour les développeurs tiers.
/wp-content/plugins/
./* * Nom du plugin: Simple Plugin */ Function test_callback_function () {). [ Echo "From plugin"; } add_action ('test', 'test_callback_function');
Activez maintenant notre Simple plugin à partir du tableau de bord d’administrateur de WordPress.
Allez au menu plugin et activez-le.
Après avoir activé le plugin ci-dessus, programmez le résultat:
Test 1De plugin
[NOTE: Si nous ajoutons la priorité pour l’action de notre plugin de 1 à 9, alors le résultat sera imprimé comme suit:
De pluginTest 1
Parce que WordPress considère le 10 priority by default
pour toutes les actions ajoutées.]
Vérifiez les exemples ci-dessous:
Exemple simple PHP:
$ data = array ('un', 'deux'); print_r ($ data);
Au-dessus du programme, imprimez la sortie:
Tableau ([0] => un [1] => deux)
$ data = apply_filters ('mon_filtre_nom', tableau ('un', 'deux')); print_r ($ data); add_filter (' mon_nom_filtre ', fonction ($ old_data) { retourner un tableau (' trois ',' quatre '); });
Au-dessus du programme, imprimez la sortie:
Tableau ([0] => trois [1] => quatre)
Ici, nous avons ajouté le filtre my_filter_name
et modifié la sortie array( 'one', 'two' )
existante avec array( 'three', 'four' )
sans modifier les fichiers thème/plug-in.