J'essaie de trouver ce qui fonctionne exactement avec do_action et add_action. J'examine déjà avec add_action mais pour do_action j'essaie comme nouveau maintenant. C'est ce que j'ai essayé.
function mainplugin_test() {
$regularprice = 50;
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
// and doing further
//like i echoing the regular price
echo $regularprice; //It print 100 from this code
}
Maintenant, au lieu de placer quelques codes dans le fichier principal, je prévois de créer do_action pour éviter les problèmes de code.
function mainplugin_test() {
$regularprice = 50;
do_action('testinghook');
// and doing further
//like i echoing the regular price
echo $regularprice; //It should print 100 but it print 50
}
donc j'ai créé une autre fonction pour souligner ce crochet comme quelque chose comme
function anothertest() {
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
}
add_action('testinghook','anothertest');
Vous ne savez pas comment ajouter les lignes de code à ce hook pour que la fonction ci-dessus fonctionne? D'après ce que j'ai essayé dans mon environnement de test, rien n'y fait. Si je comprends bien do_action est plus comme inclure un fichier ??? Si ce n'est pas le cas, merci de me le dire.
Merci.
La raison pour laquelle il n'a pas imprimé 100
, car $regularprice
dans la fonction anothertest()
est locale à cette fonction. La variable $regularprice
utilisée dans la fonction parent mainplugin_test()
n'est pas identique à la variable utilisée dans la fonction anothertest()
; elles sont dans une portée distincte.
Vous devez donc définir le $regularprice
dans une portée globale (ce qui n’est pas une bonne idée) ou vous pouvez passer l’argument en tant que paramètre à do_action_ref_array
. Le do_action_ref_array
est le même que do_action
mais il accepte le deuxième paramètre en tant que tableau de paramètres.
function mainplugin_test() {
$regularprice = 50;
// passing as argument as reference
do_action_ref_array('testinghook', array(&$regularprice));
echo $regularprice; //It should print 100
}
// passing variable by reference
function anothertest(&$regularprice) {
if(class_exists('rs_dynamic')) {
$regularprice = 100;
}
}
// remain same
add_action('testinghook','anothertest');
do_action
crée un hook d’action, add_action
exécute des fonctions accrochées lorsque ce hook est appelé.
Par exemple, si vous ajoutez les éléments suivants dans le pied de page de votre thème:
do_action( 'my_footer_hook' );
Vous pouvez faire écho au contenu de cet emplacement depuis functions.php ou un plugin personnalisé:
add_action( 'my_footer_hook', 'my_footer_echo' );
function my_footer_echo(){
echo 'hello world';
}
Vous pouvez également passer des variables à un hook:
do_action( 'my_footer_hook', home_url( '/' ) );
Que vous pouvez utiliser dans la fonction de rappel:
add_action( 'my_footer_hook', 'my_footer_echo', 10, 1 );
function my_footer_echo( $url ){
echo "The home url is $url";
}
Dans votre cas, vous essayez probablement de filtrer la valeur en fonction d'une condition. C'est à quoi servent les crochets de filtre:
function mainplugin_test() {
echo apply_filters( 'my_price_filter', 50 );
}
add_filter( 'my_price_filter', 'modify_price', 10, 1 );
function modify_price( $value ) {
if( class_exists( 'rs_dynamic' ) )
$value = 100;
return $value;
}
Référence
En fait, le add_action
est un crochet d’action utilisé pour invoquer une action (un gestionnaire enregistré) à un moment donné en fonction de l’action, et le do_action
est utilisé pour appeler manuellement cette action enregistrée. Par exemple:
add_action('some_hook', 'handler_for_some_hook');
Ce gestionnaire sera appelé lorsque vous exécuterez ou que le script effectuera le some_action
, mais si vous le souhaitez, vous pouvez appeler cette action manuellement à l'aide du do_action
. Donc, fondamentalement, le do_action
appelle le hook d’action enregistré lorsque vous l’appelez. Vérifiez plus sur Codex .
// avec do_action nous créons notre propre balise (hook), utilisée dans wordpress Ex. Ici, j'ai ajouté 1 fonction personnalisée pour appeler ceciIn add_action, j'ai ajouté un nom de fonction avec n'importe quel nom de balise personnalisé With do_action (mon nom de balise personnalisé)
function mywork()
{
echo "display my name";
}
add_action('mytag','mywork');
do_action('mytag');
--- add_action () ---
crochet spécifique qui affectera par fonction ()
add_action( hook, **function**() )
Cela changera la fonctionnalité et le comportement de wordpress en fonction du “crochet” spécifique, nous pourrons le changer ainsi que la méthode des fonctions.