web-dev-qa-db-fra.com

Utilisez wp init hook pour appeler d’autres hooks?

Je veux savoir s’il s’agit d’une bonne pratique en fonction du développement de thèmes ou de plugins WordPress.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

merci

11
atinder

En général: Oui, attendez qu'un hook dédié lance votre propre code. Jamais jetez simplement une instance d'objet dans l'espace de noms global. Mais init est rarement nécessaire.

Vous vous connectez le plus tard possible. Si votre premier code est exécuté sur wp_head, n'utilisez pas un hook antérieur. Vous pouvez même crochets en cascade :

add_action( 'wp_head', 'first_callback' );

function first_callback()
{
    // do something
    // then
    add_action( 'wp_footer', 'second_callback' );
}

Concernant le hook init: Utilisez plutôt wp_loaded. Cela fonctionne après init et après l'appel de ms_site_check(). De cette façon, vous évitez d'exécuter votre plug-in sur un sous-site non valide dans une installation multi-site. Tout le reste est identique.

16
fuxia

Je ne vois pas les gros avantages de cette pratique, pour ces raisons:

Vos fonctions de rappel ne sont pas appelées lors de l'inscription

Les fonctions add_action et add_filter ajoutent uniquement une entrée à la variable globale $wp_filter qui contient tous les filtres et toutes les actions. Voir source . Cela n'appelle pas votre fonction. Votre code s'exécutera uniquement lorsque les do_action et apply_filters seront appelés (avec le nom du hook approprié), ce qui se produit très tard à l'endroit où ces hooks devraient se trouver.

Cela pourrait rendre la variable globale $wp_filter plus grande => plus de mémoire est requise. Mais je pense que créer une nouvelle fonction pose le même problème.

Code d'organisation

Tout mettre dans la fonction un vous oblige à mémoriser tous les points d'ancrage de tous les fichiers de votre thème/plugin. Vous ne voudriez pas faites quelque chose comme ceci:

  • in header.php: ajoute des points d'ancrage et des fonctions de rappel pour les événements se déroulant dans l'en-tête (comme le menu, le script d'enregistrement)
  • dans content.php: ajout de points d'ancrage et de rappel pour filtrer le contenu
  • admin-menu.php: ajout de hooks et de fonctions de rappel pour ajouter le menu admin

(supposons que ces fichiers sont placés dans votre thème/plugin)

Au lieu de cela, vous devez:

  • mettre uniquement les fonctions de rappel dans header.php, content.php, admin-menu.php
  • et mettre tous les crochets dans une fonction séparée dans un autre fichier

=> Cela vous rendra difficile de savoir ce qui se passe lorsque vous consultez le contenu du fichier header.php. Vous devez chercher pour savoir quand ces rappels sont déclenchés.

Et pensez à la situation lorsque vous avez plusieurs classes dans votre thème/plugin. Mettez-vous tous les crochets de toutes les classes au même endroit? Ou chaque classe a-t-elle une fonction wrapper qui contient tous les crochets? C'est trop redondant!

Au-dessus de ces raisons, je pense que c'est son style personnel :). Je vois des cadres comme Hybrid qui fait ce que vous avez dit. Parfois, il m'est difficile de creuser dans ces cadres!

3
Anh Tran