La différence entre le fichier du plugin (principal) et le slug du plugin est un endroit où le Codex WordPress pourrait faire beaucoup mieux. Je comprends votre confusion telle que je l'ai ressentie trop récemment (mêlée de frustration).
C'est ce que j'ai appris en faisant un "travail de détective" sur le code principal de WordPress.
Le fichier du plugin
C'est la façon unique dont WordPress identifie et enregistre un plugin. Il est composé du répertoire du plugin ET du fichier de plugin principal (celui avec l'en-tête du fichier contenant les différents détails du plugin comme la version, l'auteur, etc.).
Cela ressemblerait à quelque chose comme ceci: your-plugin-directory/main-file.php
Si vous regardez les données des plugins actifs (retournés par get_option( 'active_plugins' )
), vous verrez que WordPress n'a besoin que de ce fichier de plugin pour identifier correctement les plugins.
Vous pouvez choisir de le considérer comme le chemin relatif du fichier principal de votre plugin (par rapport au wp-content/plugins/
répertoire qui est). Vous pouvez "composer" le chemin absolu du fichier plugin principal avec quelque chose comme ceci:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file
Le noyau lui-même génère le fichier du plugin comme ceci:
$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );
Le plugin slug
On pourrait s'attendre à ce que le plugin "slug" soit une sorte d' ID standardisé pour le plugin comme le post slug est pour les publications - vous pouvez donc utiliser ce "slug" pour le fournir aux fonctions principales de WordPress et faire avancer les choses.
Pas vraiment. Après avoir cherché dans le noyau des références à des plugins de plugins (ou des thèmes pour ce qui compte) et trouvé presque rien, je pense que je l'ai compris.
Les seules véritables limaces sont ceux pour des choses accessibles via une URL unique: messages, pages, taxonomies, etc. C'est le point entier de prendre le nom de quelque chose (comme un titre de poste) et générer une version conviviale URL de cette: à l' utilisation dans une URL.
Mais où utilisons-nous le thème / plugins "slugs" dans les URL?
Nous ne le faisons pas sur des installations WordPress individuelles - ni dans l'admin WP ni dans le frontend.
Cependant, il existe un endroit très enchevêtré avec le code WordPress, le site WordPress.org. Les gens ont du mal à faire la distinction entre les deux, y compris le fait qu'il est devenu courant chez les développeurs de considérer le thème WordPress.org ou les plugins de plugins devraient fonctionner de la même manière qu'un slug de publication ou de page.
Ils servent le même objectif mais sur des sites Web distincts . Sur WordPress.org, ils sont utilisés pour identifier de manière unique un thème parmi les autres et un plugin parmi les autres (dans des URL comme https://wordpress.org/plugins/akismet/
).
Mais en ce qui concerne les installations individuelles de WordPress, la même unicité ne peut pas être garantie car il n'y a aucune autorité pour l'appliquer (comme sur WordPress.org). Cela pourrait fonctionner si tous les plugins et thèmes venaient de WordPress.org, mais heureusement, ce n'est pas le cas.
Que fait le code WordPress avec les slugs de thème / plugin?
Le code de base de WordPress ne repose pas sur des slugs de thème / plugin pour faire des choses comme installer, activer, mettre à jour, supprimer des thèmes ou des plugins.
Pour les thèmes, il s'appuie sur le répertoire du thème car le point d'entrée principal dans un thème est le style.css
fichier (vous ne pouvez pas utiliser un autre fichier CSS pour contenir l'en-tête des détails de votre thème).
Pour les plugins, il s'appuie sur le répertoire des plugins ET sur le fichier de plugin principal , car les plugins peuvent appeler leur fichier principal comme ils le souhaitent.
La seule chose pour laquelle le noyau utilise des slugs theme / plugins est quand il gère les thèmes et les plugins du répertoire WordPress.org: récupérer les listes de plugins, rechercher les mises à jour, rapporter les données d'utilisation du répertoire, etc.
Pour en savoir plus sur les plugins de plugin: chaque fois que vous trouvez des données de plugin avec l' slug
entrée, 99% du temps, il se référera au slug WordPress.org du plugin.
Comment identifier les plugins?
Si vous souhaitez activer, mettre à jour, désactiver ou supprimer par programme un certain plug-in sur une installation WordPress, vous devez utiliser le fichier du plug-in. Vous pouvez l'obtenir comme ceci à partir du fichier principal de votre plugin:
$plugin_file = plugin_basename( __FILE__ );
Si vous souhaitez cibler un certain plugin à partir d'un autre plugin, les choses deviennent un peu plus délicates car vous devez vous fier à un peu de "conjectures".
Vous pouvez coder en dur le nom du plugin, rechercher le plugin dans la liste de tous les plugins (voir get_plugins () ) et obtenir le fichier du plugin à partir de là.
Si vous connaissez une classe ou une fonction définie par ce plugin, vous pouvez utiliser la réflexion (voir cette réponse pour les classes et celle-ci pour les fonctions).
J'espère que cela vous aide, vous et d'autres qui pourraient avoir du mal à gérer les "plugins slugs". Cela aurait pu me faire gagner quelques heures :)