Combien de fois puis-je me connecter à la même action?

8

J'ai un thème qui inclut une configuration, after_setup_thememais j'aimerais écrire mes propres fonctions qui doivent également être exécutées after_setup_theme. Je préfère garder mes affaires dans un fichier séparé. Puis-je appeler after_setup_themeplusieurs fois?

gillespieza
la source

Réponses:

27

Les crochets WordPress fonctionnent comme Hollywood: vous ne les appelez pas, ils vous appellent. Mais contrairement à Hollywood, ils continuent d'appeler tout le monde sur la liste.

Il est normal qu'une action ou un filtre ait plusieurs fonctions accrochées, à partir de différents plugins, ou même simplement des fonctions différentes dans le noyau WordPress qui font toutes quelque chose de spécifique . C'est non seulement possible, mais même une bonne pratique, car cela signifie que votre code devient plus clair (chaque fonction ne fait qu'une seule chose) et il est plus facile de désactiver une fonctionnalité spécifique en la décrochant.

N'oubliez pas que vous pouvez également jouer avec les priorités des hooks: si vous voulez exécuter les deux functionA()et functionB()dans le after_setup_theme, mais functionA()devez l'exécuter avant functionB(), vous pouvez accrocher functionA()avec la priorité par défaut 10et functionB()avec la priorité 20(ou tout autre numéro supérieur à 10). Ce qui ne fonctionnera pas, c'est d'accrocher une autre fonction à une action pendant l'exécution de cette action . Donc , vous ne pouvez pas accrocher functionB()à after_setup_themepartir functionA(), appelé after_setup_theme. Vous pourriez l'appeler directement, mais vous perdriez l'avantage de crochets séparés.

Jan Fabry
la source
7

Ma suggestion serait d'avoir une fonction "maître", si vous voulez, qui appelle toutes vos autres fonctions. De cette façon, vous ne devez vous accrocher à cette action qu'une seule fois.

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Do something */}
function func_b(){ /* Do something */}
function func_c(){ /* Do something */}
function func_d(){ /* Do something */}
function func_e(){ /* Do something */}

Cela présente l'avantage supplémentaire de pouvoir renvoyer des valeurs que vous pouvez utiliser dans les appels de fonction suivants.

Aaron Wagner
la source
4

Oui, vous pouvez ajouter autant d'actions que vous le souhaitez au crochet. Essayez-le.

fuxia
la source