Dans quel ordre WordPress charge-t-il les fichiers des plugins?

21

Dans quel ordre les plugins sont-ils chargés dans WordPress?

Et dans le dossier d'un plugin particulier, quel ordre est suivi pour le chargement?

urok93
la source
Vous pouvez déboguer très profondément avec ce plugin: https://wordpress.org/plugins/whats-running/ Il répertorie tous les fichiers requis dans WordPress.
Szépe Viktor

Réponses:

26

Réponse à la première question:

  1. Dans wp-settings.php, WordPress vérifie d'abord les plug-ins indispensables (plug-ins dans le mu-pluginsdossier facultatif ) et les charge.

  2. Ensuite, si vous exécutez une installation multisite, il recherche les plugins activés par le réseau et les charge.

  3. Ensuite, il vérifie tous les autres plugins actifs en regardant l' active_pluginsentrée de la wp_optionstable de base de données et les parcourt. Les plugins seront répertoriés par ordre alphabétique.

Voici l'ordre dans lequel WordPress charge à peu près tout: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

Le fait est que peu importe l'ordre dans lequel chaque plugin est chargé, car les plugins correctement écrits utiliseront des crochets WordPress, qui vous permettront de brancher des fonctionnalités à des points spécifiques plus tard dans le démarrage de WordPress. (Les plugins correctement écrits préfixeront également leurs fonctions et classes afin qu'il n'y ait pas de conflits.)

Plus d'informations sur l'API de plugin: http://codex.wordpress.org/Plugin_API/

Réponse à la deuxième question:

Dépend totalement du plugin. WordPress ne charge qu'un seul fichier dans le plugin, celui qui est généralement nommé the-plugin-name.phpet contient le titre, la description, l'auteur, etc. en haut. C'est au plugin de charger le reste de ses fichiers, en utilisant require_onceet wp_enqueue_scriptet ainsi de suite.

SeventhSteel
la source
Donc, si je crée un plugin, puis que je libère plus tard un plugin complémentaire qui devrait s'exécuter après l'exécution du plugin d'origine, comment puis-je garantir cet ordre?
urok93
Cela dépend vraiment de ce que vous essayez de faire. Mais en général, vous devez configurer chacun d'eux pour s'exécuter sur un hook spécifique à l'aide de la fonction add_action (), qui vous permet de définir la priorité. codex.wordpress.org/Function_Reference/add_action
SeventhSteel
@SeventhSteel Mais que se passe-t-il si un plugin s'appuie sur le hook créé par un autre plugin. Si un plugin utilise apply_filters()pour créer un hook, mais s'exécute avant un plugin qui utilise add_filter(), cela fonctionnera-t-il toujours? Logiquement, il semble que apply_filters()ce soit déjà fait, donc les add_filter()appels dans le second plugin ne feront rien. Est-il important dans quel ordre les plugins se chargent lorsque vous utilisez uniquement des hooks créés par plugin?
trusktr
Ce qui compte, c'est ce qui s'est chargé au fil du temps apply_filters(). add_filter()doit fonctionner avant apply_filters(). S'il se add_filter()trouve dans un fichier de plugin et non dans une autre fonction, il s'exécutera sur le plugins_loadedhook, ce qui se produira généralement avant que vous en ayez besoin apply_filters().
SeventhSteel
Un scénario courant est d'avoir plusieurs plugins qui ajoutent leur contenu après the_content- comment l'ordre de leur apparence est-il déterminé?
Dan Knauss
9

Je trouve qu'il est utile d'inclure une action de «chargement tardif» dans mon plugin qui s'exécute après que tous les plugins ont terminé leur chargement comme ceci:

add_action('plugins_loaded', 'my_late_loader');

La fonction my_late_loader est alors lancée après tous les autres plugins ce qui me permet d'utiliser des hooks définis par d'autres plugins dans ma propre fonction my_other_function qui est lancée dans my_late_loader

/**
 * Late loading function for actions that must run after all plugins 
 * have loaded
 */
function my_late_loader(){
    add_action( 'some_hook', 'my_other_function', 10, 1);
}

Peu compliqué (je sais), mais cela garantit que les crochets dans d'autres plugins sont créés avant d'être ajoutés quel que soit l'ordre de chargement du plugin.

Clinton
la source