Différence entre do_action et add_action

18

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

Je sais que add_action est utilisé pour relier notre fonction à la fonction spécifiée. Par exemple, add_action('wp_head'.'myfunc'); maintenant, quel que soit le code de myfunc sera exécuté dans wp_head() . C’est clair, mais je doute de ce qu’il fait à do_action ?

Je pense qu'il est utilisé pour créer notre propre hook, comme les hooks 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 et ensuite je déménagerai là-bas.

Quelqu'un peut-il m'aider?

MODIFIER après la 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 cela fonctionne bien

/******************working****************/
add_action('wp_head','custom_register');
    
posée sun 28.10.2013 - 11:35

4 réponses

10

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

Vous pouvez l'utiliser pour offrir une API pour votre plug-in , afin que d'autres plug-ins puissent enregistrer des rappels pour votre compte personnalisé. action. Exemple: Dois-je appeler do_action dans mon plug-in?

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é.

    
réponse donnée fuxia 28.10.2013 - 11:42
1

C’est ce que je suppose. Par conséquent, si vous le savez mieux, faites un commentaire pour que je puisse le mettre à jour.

Votre code de plugin est exécuté avant wp_head() (nous pouvons supposer qu'il invoquera les actions qui lui ont été ajoutées). Lorsque vous add_action('wp_head','custom_register') , vous dites à PHP que, lorsque (à l'avenir) do_action('wp_head') sera appelé, il faudra également appeler 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 pour le moment. C'est pourquoi Toscho a demandé ce qui se passait lorsque vous appelez do_action('custom') après que 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.
    
réponse donnée Dave Scotese 14.02.2016 - 20:23
0

do_action : enregistre un crochet d'action pendant que add_action : ajoute une fonction de rappel au hook enregistré.

Exemple

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

  1. Vous allez ajouter un crochet d'action 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 !'; }

    
réponse donnée Aamer Shahzad 19.04.2018 - 08:10
-1

Vous devez utiliser comme ci-dessous:

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

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect
    
réponse donnée user112289 01.02.2017 - 17:15

Lire d'autres questions sur les étiquettes