Recherche…


Syntaxe

  • add_action (tag, function_to_call, priority, num_of_args);
  • add_filter (tag, function_to_call, priority, num_of_args);

Paramètres

Paramètre Explication
$ tag (string) (Obligatoire) Nom de l'action à laquelle la fonction $ est connectée.
fonction $ (callable) (Obligatoire) Requiert une chaîne contenant le nom de la fonction ou la fonction anonyme. Voir des exemples pour l'ajout de fonctions dans les classes.
$ priorité (int) default = 10. Les fonctions attachées aux hooks / filters s'exécuteront dans la priorité assignée. Vous pouvez avoir une situation où vous voulez travailler avec du code avant toute autre action, définir la priorité = 1 ou après toutes les autres fonctions attachées priorité = 100 etc. Comme avec toutes les fonctions php, vous pouvez utiliser la fonction sans transmettre de valeur à une variable où une valeur par défaut a été définie, mais si vous souhaitez modifier le nombre de paramètres renvoyés, vous devez spécifier!
paramètres $ (int) default = 1. Le nombre de paramètres renvoyés à votre fonction attachée. Les paramètres renvoyés dépendront du numéro attaché où le hook a été créé. Voir apply_filters() et do_action() pour plus de détails.

Remarques

Crochets Wordpress

Quelque chose qui confond souvent les développeurs lorsqu'ils commencent à travailler avec WordPress est l'utilisation de apply_filters() et add_action() . Vous verrez souvent des plugins / thèmes utiliser ces derniers dans le code et si vous ne comprenez pas le concept, vous aurez du mal à travailler avec eux.

En bref (très bref, rechercher l'organigramme de chargement de WordPress pour un processus détaillé), WordPress se charge de la manière suivante:

  1. wp-load.php - fonctions etc
  2. mu-plugins - tous les fichiers trouvés dans le dossier mu-plugins - souvent utilisés pour servir des objets en cache
  3. Plugins - aucun ordre particulier, les plugins installés et activés ne seront chargés
  4. Thème enfant / parent actif
  5. init - reste des données
  6. modèle

Si vous êtes développeur et travaillez avec un fichier de fonctions, vous pouvez voir que les deux sont chargés plus tôt dans le processus que les fichiers que vous utilisez. Cela signifie que vous ne pouvez pas modifier les processus (notez que vous ne pouvez pas écraser les fonctions) ou les variables qui s'exécutent plus tard ou qui n'ont pas encore été définies. Les développeurs de thèmes peuvent également placer des crochets dans leur code pour permettre aux plug-ins de se connecter ou les plug-ins peuvent autoriser d'autres plug-ins à remplacer leurs variables. Maintenant, cela peut être déroutant jusqu'à présent, mais restez là.

Pour comprendre add_filter() et add_action() nous devons examiner comment les hooks sont créés en premier lieu.

$arga= 'hello';
do_action('im_a_hook', $arga );

Lorsque vous rencontrez ce qui précède dans WordPress, il appelle toutes les fonctions attachées au hook im_a_hook (recherchez $wp_filter pour plus d'informations sur le processus). Dans votre fonction associée, $arga sera disponible pour que la fonction associée fonctionne avec.

add_action('im_a_hook', 'attached_function');

function attached_function($arga){
     echo $arga;
}

Cela ouvre de nouvelles possibilités puissantes pour modifier les variables à certains points du processus de chargement. Rappelez-vous que nous avons dit plus tôt que les modèles sont chargés après les plugins / thèmes? Un plugin commun est WooCommerce qui crée des écrans plus tard dans le processus, je ne vais pas documenter comment mais un exemple de do_action peut être trouvé dans le plugin.

do_action( 'woocommerce_after_add_to_cart_button' );

Nous avons ici un hook créé qui ne renvoie aucune variable, mais nous pouvons toujours nous amuser avec:

add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');

function special_offer(){
    echo '<h1>Special Offer!</h1>;
}

L' add_action ci-dessus fera echo un en-tête d'offre spéciale où do_action('woocommerce_after_add_to_cart_button') se trouve lors de la création d'un écran WooCommerce. Nous pouvons donc utiliser ce crochet pour insérer du HTML. D'autres utilisations peuvent inclure la redirection vers un autre écran, etc.

Plusieurs variables peuvent également être transmises à la fonction. Essayez ceci dans vos fonctions thématiques. Notez le dernier paramètre que nous définissons sur 3, car nous voulons travailler avec les 3 paramètres disponibles. Si nous changions cela en 2, seuls 2 seraient renvoyés et nous aurions une erreur indéfinie.

add_action('custom_hook', 'attached_function', 10, 3);

function attached_function($a,$b,$c){
    
    var_dump($a);
    var_dump($b);
    var_dump($c);
    
}
    

$arga = 1;
$argb = 2;
$argc = 3;

do_action('custom_hook', $arga, $argb, $argc);
exit;

Il existe un autre type de crochet WP appelé filtre. Un filtre est différent d'une action dans son utilisation, une action ne peut recevoir que des variables, de toute évidence ces variables font partie de la portée des fonctions (vous devez savoir ce qu'est la portée PHP, si ce n'est google). Les filtres renvoient les données renvoyées afin que vous puissiez modifier les variables.

$filter_me= apply_filters('im_a_filter', $variable_to_filter);

Lorsque vous voyez ce qui précède, vous pouvez modifier la valeur de $filter_me car toutes les données que vous retournez seront celles stockées dans la variable. Donc, par exemple (notez que nous $filter_me $variable_to_filter en $filter_me dans l'exemple):

add_filter('im_a_filter', 'attached_function', 100);

function attached_function($filter_me){
    
    $filter_me= 'ray';
    
    return $filter_me;
    
}


$filter_me = 'bob';
$filter_me= apply_filters('im_a_filter', $filter_me);

La variable $filter_me contiendra désormais «ray» plutôt que «bob» , nous avons défini une priorité de 100, nous sommes donc raisonnablement convaincus que personne ne change la valeur après utilisation (il peut y avoir plusieurs filtres exécutés sur le même crochet). peut maintenant changer les variables utilisées plus tard dans le processus si apply_filters() est présent.

Vous pouvez également transmettre plusieurs paramètres, mais vous ne pouvez modifier que la valeur d'un. Vous devez également retourner une valeur, sinon votre variable ne contiendra rien. Si vous comprenez comment vous utilisez php pour attribuer des valeurs / tableaux / objets à des variables, cela vous semblera évident, par exemple:

add_filter('im_a_filter', 'attached_function', 100, 3);

function attached_function($filter_me, $arga, $argb){
    
    $filter_me= 'ray'.$arga.$argb;

    $arga= 'you fool';
    
    return $filter_me;
    
}

$filter_me = 'bob';

$arga = ' middlename';
$argb = ' surname';

$filter_me= apply_filters('im_a_filter', $filter_me, $arga, $argb);

La variable $filter_me contient maintenant "ray middlename surname" . Mais qu'en est-il de $arga ? Cela contient toujours "middlename" , changer un $arga à "you fool" dans notre fonction n'a aucun effet sur la valeur définie en dehors de son champ d'application (il y a des manières, Google globals etc.)

add_action ($ hook_name, $ function, $ priority, $ paramètres)

add_filter ($ hook_name, $ function, $ priority, $ paramètres);

add_action - init

add_action('init', 'process_post');

function process_post(){
   if($_POST)
     var_dump($_POST);
}

add_action - init - fonction anonyme

add_action('init' , function(){
    echo 'i did something';
});

add_action - init - dans l'objet de classe

 class sample{

     public function __construct(){
         add_action('init', array($this, 'samp') );
     }


     public function samp(){ // must be public!!
         echo 'i did something';
     }
 }

 new sample();   

add_action - init - dans la classe statique

 class sample{

     public static function add_action_func(){
         //note __CLASS__ will also include any namespacing
         add_action('init', array(__CLASS__, 'samp') );
     }

     public static function samp(){
         echo 'i did something';
     }
     
 }

 sample::add_action_func();


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow