Différence entre do_action et add_action

20

Cette question peut être erronée, je n'en suis pas sûr. Parce que je ne suis pas clair là-dessus.

je sais add_action qu'il est utilisé pour accrocher notre fonction à la fonction spécifiée. Par exemple, add_action('wp_head'.'myfunc');maintenant, tout ce qui myfuncsera codé sera exécuté dans le wp_head(). C'est clair mais j'ai des doutes sur do_actionce que ça fait?

Je pense qu'il est utilisé pour créer notre propre crochet comme les crochets déjà disponibles (wp_head, wp_footer, .. etc) Si je me trompe, 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 pointent vers 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 vais y aller.

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é cela dans le plugin mais je n'ai pas reçu le message d'alerte.

Mais quand j'accroches la même fonction avec wp_headalors ça marche bien

/******************working****************/
add_action('wp_head','custom_register');
Soleil
la source
Que se passe-t-il lorsque vous appelez do_action('custom'); après avoir enregistré le rappel? Et assurez-vous que jQuery est chargé.
fuxia
je n'ai pas reçu le message d'alerte sur le back end ou le front end
dim
jQuery sont chargés. Quand j'accroche la même fonction avec wp_headelle fonctionne bien mais pas aveccustom
dim
Sun, je crois que toscho a répondu à votre question d'origine et vous devez la marquer comme résolue. Les modifications n ° 3 et n ° 4 que vous avez effectuées appartiennent à une nouvelle question .
brasofilo

Réponses:

13

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

Vous pouvez l'utiliser pour proposer une API pour 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 qui fonctionnent 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é.

fuxia
la source
Merci pour l'aide que j'ai obtenue, c'est principalement à des fins API. J'ai essayé un échantillon mais cela n'a pas fonctionné. Pouvez-vous y trouver un problème? Vérifiez mon EDIT @toscho
dim
Pouvons-nous dire cela comme un autre cas comme l'héritage? au lieu d'étendre et de remplacer la classe, nous allons de cette façon. Est-ce correct?
dim
@sun Hm, oui, mais vous pouvez combiner les deux approches , elles ne s'excluent pas mutuellement.
fuxia
1

Ceci est ma conjecture, donc si vous savez mieux, veuillez faire un commentaire afin que je puisse mettre à jour ma conjecture.

Votre code de plugin est exécuté avant wp_head()(ce qui, nous pouvons supposer, invoquera les actions qui y sont ajoutées). Quand vous add_action('wp_head','custom_register'), vous dites à PHP que quand (dans le futur) do_action('wp_head')sera appelé, custom_register()aussi. 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é fait, et quand il a été appelé, aucune action n'a été (encore) ajoutée. C'est pourquoi Toscho a demandé ce qui se passe lorsque vous appelez do_action('custom') après avoir enregistré le rappel. Votre réponse concernant le back-end et le front-end est ambiguë. Si vous échangez les deux dernières lignes dans le 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.
Dave Scotese
la source
0

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

Exemple

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

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

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

Aamer Shahzad
la source
-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
user112289
la source
Cela fonctionne pour moi
user112289