Question

Je suis à la recherche à l'API de plugin un peu plus en profondeur récemment et je me demandais quelles différences réelles, il y avait entre l'action et les crochets de filtre . Ils ont tous deux sont des événements qui reçoivent des données en tant que paramètre et ils semblent tous deux être en mesure de faire les mêmes choses.

Il est évident que je vois que les actions sont appelées lorsque les actions ont lieu et les filtres sont appelés quand est manipulé des données, mais il semble être juste une différence de nommage sémantique.

En plus de la sémantique et ce qu'ils sont utilisés pour, quelles différences réelles sont là entre eux?

Était-ce utile?

La solution

Salut @Sruly :

Vous avez à peu près répondu à votre propre question, mais je vais élaborer un peu.

crochets Action

Actions Hooks sont destinés à être utilisés lorsque le noyau WordPress ou un plug-in ou d'un thème vous donne la possibilité d'insérer votre code à un certain moment et faire une ou plusieurs des éléments suivants:

  1. Utiliser echo injecter une balise HTML ou un autre contenu dans le tampon de réponse,
  2. Modifier état global variable pour une ou plusieurs variables, et / ou
  3. Modifier les paramètres est passé à votre fonction de crochet (en supposant que le crochet a été appelé par do_action_ref_array() au lieu de do_action() puisque celui-ci ne supporte pas les variables passant par référence .)

Filtre crochets

Filtre crochets se comportent très semblables à Crochets Action , mais leur utilisation est destinée à recevoir une valeur et revenir éventuellement une version modifiée de la valeur. Un crochet de filtre peut également être utilisé comme une action Crochet dire pour modifier une variable globale ou générer du code HTML, en supposant que est ce que vous devez faire lorsque le crochet est appelé. Une chose qui est très important au sujet du filtre crochets que vous n'avez pas besoin de soucis avec l'action crochets est que la personne à l'aide d'un crochet de filtre doit retour (une version modifiée de ) le premier paramètre, il a été adopté. Une erreur de débutant commune est d'oublier de retourner cette valeur!

Utilisation des paramètres supplémentaires pour fournir un contexte dans le filtre crochets

En aparté Je sentais que le filtre crochets ont été clopinant dans les versions antérieures de WordPress parce qu'ils ne recevraient qu'un seul paramètre; i.e. ils obtiendraient une valeur à modifier, mais aucun paramètre 2ème et 3ème pour fournir un contexte. Ces derniers temps, et de façon positive cependant, il semble que l'équipe de base de WordPress a joyeusement (pour moi) été l'ajout de paramètres supplémentaires pour filtrer crochets afin que vous puissiez découvrir plus de contexte. Un bon exemple est le crochet de posts_where; Je crois que quelques versions arrière, il n'accepte un paramètre étant la de requête en cours « où » SQL de classe, mais maintenant il accepte à la fois la clause where et une référence à l'instance actuelle du classe WP_Query qui invoque le crochet.

Alors, quelle est la vraie différence?

En réalité, les crochets de filtre sont à peu près un surensemble de crochets d'action. Le premier peut faire quoi que ce soit ce dernier peut faire et un peu plus mais le développeur n'a pas la responsabilité de retourner une valeur avec le crochet d'action qu'il fait avec le crochet de filtre.

Donner orientation et télégraphier intention

Mais c'est sans doute pas ce qui est important. Je pense que ce qui est important est que par un développeur choisissant d'utiliser un crochet d'action par rapport à un crochet de filtre ou vice-versa, ils sont télégraphier leur intention et donc conseils donnant à la themer ou développeur du plugin qui peuvent utiliser le crochet. Essentiellement, ils disent soit "Je vais vous appeler, faire tout ce que vous devez faire" ou "I » ve va vous transmettre cette valeur à modifier, mais assurez-vous que vous passez en arrière « .

En fin de compte Je pense que l'orientation fournie par le choix du type de crochet est la valeur réelle de la distinction . OMI, de toute façon.

Hope this helps!

Autres conseils

Si vous regardez la source de la fonction de base de add_action(), il est juste un wrapper pour la fonction add_filter() ...

Et si vous regardez la fonction de base de do_action(), il est très similaire à la fonction de base de apply_filters(), avec une différence très clé:. Il ne retourne pas de valeur

Alors qu'est-ce que cela signifie? les actions sont comme des filtres, à l'exception d'une action ne retourne pas de valeur, de sorte que vous ne pouvez pas modifier les données. Il montre qu'il est simple de créer le mécanisme d'action de WordPress en copiant simplement le mécanisme de filtrage, et ne pas retourner une valeur. En fait, tout ce que vous pouvez faire avec une action est simplement exécuter une fonction sans modifier une certaine valeur.

de mot simple.

  

Actions sont les fonctions PHP qui exécutent la sortie.

     

Filtres sont les fonctions PHP qui renvoient la sortie.

Mise à jour: Nous pouvons étendre un plugin qui utilisent les actions et les filtres sans modifier le code là. En ajoutant des filtres et des actions dans notre propre thème ou plugin.


Comment utiliser?

Action:

Consultez ci-dessous des exemples simples dans votre fichier thème functions.php.

  1. Premier exemple: (Exemple simple PHP)
function test() {
     echo "Output";
}

test();

programme ci-dessus imprimer la sortie:

Output

[NOTE: Ici test () appelle simplement la fonction. Et exécuter la fonction de rappel 'test'.]


  1. Exemple deux: (utilisation simple d'action)
function test1() {
     echo "Output";
}
add_action( 'test', 'test1' );

do_action( 'test' );

programme ci-dessus imprimer la sortie:

Output

[NOTE: Ici fonctionne do_action('test') comme appeler la fonction. Et exécuter la fonction de rappel 'test1'.]


  1. Exemple trois: (Une autre utilisation des actions)
function test2() {
     echo "Test 2";
}
add_action( 'test', 'test2', 1 );

function test1() {
     echo "Test 1";
}
add_action( 'test', 'test1', 2 );

do_action( 'test' );

programme ci-dessus imprimer la sortie:

Test 2Test 1

[NOTE: Ici fonctionne do_action('test') comme appeler la fonction. Et exécuter des fonctions de rappel sur les priorités de it.

Fonction de rappel 'test1' a la priorité 2 et 'test2' a la priorité 1.]

Si les priorités sont le changement comme « test1 » avec priorité 1 et « test2 » avec sortie, alors la priorité 2 sera:

Test 1Test 2

  1. Exemple quatre: (soutien 3ème partie) Ajouter ci-dessous le code dans functions.php
function test1() {
     do_action( 'test_before' );
     echo "Test 1";
     do_action( 'test_after' );
}
add_action( 'test', 'test1' );

do_action( 'test' );

programme ci-dessus imprimer la sortie:

Test 1

Maintenant, Créer le plugin échantillon pour vérifier comment il fonctionne pour Developer 3ème partie.

  1. Créer un dossier 'simple' dans le répertoire /wp-content/plugins/.
  2. Créer un fichier nommé 'de simple.php' et ajoutez ci-dessous le code.
/*
* Plugin Name: Simple Plugin
*/
function test_callback_function() {
     echo "From plugin";
}
add_action( 'test', 'test_callback_function' );

Maintenant, activer notre Simple plugin de tableau de bord WordPress admin.

plug-in de menu Aller et l'activer.

Après le plugin Activate programme ci-dessus imprimer la sortie:

Test 1From plugin

[NOTE: Si l'on ajoute la priorité de notre action de plug-in de 1 à 9 puis imprimer la sortie comme:

From pluginTest 1

Parce que, WordPress considèrent le 10 priority by default pour toutes les actions supplémentaires.]

Filtres

Vérifiez les exemples ci-dessous:

Exemple simple PHP:

$data = array( 'one', 'two' );
print_r( $data );

programme ci-dessus imprimer la sortie:

Array ( [0] => one [1] => two )
  1. Premier exemple: (utilisation simple du filtre)
$data = apply_filters( 'my_filter_name', array( 'one', 'two' ) );
print_r( $data );

add_filter( 'my_filter_name', function( $old_data ) {
     return array( 'three', 'four' );
});

programme ci-dessus imprimer la sortie:

Array ( [0] => three [1] => four )

Ici, nous avons ajouté filtre my_filter_name et changer la array( 'one', 'two' ) de sortie existant avec array( 'three', 'four' ) sans changer le thème / fichiers plugin.


Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top