web-dev-qa-db-fra.com

Différence entre do_action et add_action

Cette question peut être fausse, je n'en suis pas sûre. Parce que je ne suis pas clair à ce sujet.

Je sais que add_action il est utilisé pour relier notre fonction à la fonction spécifiée. Par exemple, add_action('wp_head'.'myfunc');, le code jamais utilisé dans myfunc sera exécuté dans la wp_head(). C’est clair, mais j’ai des doutes dans do_action que fait-il?

Je pense qu'il est utilisé pour créer notre propre crochet, comme les crochets déjà disponibles (wp_head, wp_footer, etc.). Si j'ai raison, quelqu'un peut-il me montrer une réponse simple et compréhensible avec un exemple simple.

J'ai essayé la différence sur Internet mais tous indiquent la différence entre add_action et add_filter. Je ne veux pas y aller parce que je veux d’abord clarifier cela, puis je déménagerai là-bas.

Quelqu'un peut-il m'aider?

EDITafter Question POST

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

J'ai essayé ceci dans le plugin mais je n'ai pas reçu le message d'alerte.

Mais quand j'accroche la même fonction avec wp_head, alors ça fonctionne bien

/******************working****************/
add_action('wp_head','custom_register');
20
sun

Utilisez do_action( 'unique_name' ) pour créer vos propres actions.

Vous pouvez l'utiliser pour proposer une API à votre plugin , afin que d'autres plugins puissent enregistrer des rappels pour votre action personnalisée. Exemple: Dois-je appeler do_action dans mon plugin?

Mais vous pouvez également utiliser des actions personnalisées (ou des filtres) dans un thème. Exemple: Méthode recommandée pour implémenter des sections personnalisées dans un thème WordPress

Et vous pouvez combiner les deux pour créer un plugin et un thème travaillant ensemble. Exemple: Comment rendre la méthode du plugin disponible dans le thème?

Résumé: add_action( 'foo' ) enregistre un rappel, do_action( 'foo' ) exécute ce rappel enregistré.

11
fuxia

C’est ma supposition, alors si vous le savez mieux, faites un commentaire pour que je puisse mettre à jour ma supposition.

Votre code de plugin est exécuté avant wp_head() (nous pouvons supposer qu'il invoquera les actions qui y sont ajoutées). Lorsque vous add_action('wp_head','custom_register'), vous dites à PHP que, lorsque (à l'avenir) do_action('wp_head') sera appelé, d'appeler également custom_register(). Il en va de même pour votre appel à add_action('custom','custom_register'), mais comme vous le voyez dans votre code, l'appel à do_action('custom') a déjà été effectué et, lors de son appel, aucune action n'a été ajoutée (encore). C'est pourquoi Toscho a demandé ce qui se passe lorsque vous appelez do_action('custom') après vous avez enregistré le rappel. Votre réponse concernant le back-end et le front-end est ambiguë. Si vous échangez les deux dernières lignes du code suivant, je pense que cela fonctionnera:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.
1
Dave Scotese

do_action: enregistre un action hook while add_action: ajoute une fonction de rappel au hook enregistré.

Exemple

Considérez que vous vouliez imprimer quelque chose avant la barre latérale de votre modèle.

  1. Vous allez ajouter un action hook dans votre fichier de modèle index.php via <?php add_action('bp_sidebar_left'); ?>.
  2. Maintenant, dans votre fichier functions.php, vous pouvez ajouter une fonction de rappel à ce hook pour imprimer ce que vous voulez.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }

0
Aamer Shahzad