Je me demande comment puis-je trouver le slug des plugins (slug = nom interne utilisé par WordPress pour faire les mises à jour des plugins et déterminer quels plugins sont actuellement actifs)? Il s'agit généralement du nom de dossier du plugin mais si un plugin n'a pas de dossier, c'est son nom de fichier (comme hello.php). Y a-t-il d'autres exceptions?
- Les caractères minuscules et majuscules sont-ils importants?
- Un plugin peut-il avoir un slug différent de son nom de dossier? Et s'il y a un plugin appelé hello.php et un autre /hello.php/hello.php?
Réponses:
La chaîne utilisée dans WordPress pour identifier le plugin est:
… Où
$file
est un fichier avec les en-têtes du plugin .Donc, si vous êtes dans votre plugin, récupérez le slug avec:
la source
dirname(plugin_basename(__FILE__))
.Si vous installez WP-CLI, vous pouvez obtenir la liste des plugins avec leur slug et leur version depuis la ligne de commande:
> wp plugin list
Je sais que ce n'est probablement pas ce que vous voulez, si vous avez besoin de trouver le slug dans le code, mais cela m'a aidé tout en travaillant avec le plugin TGM-Plugin-Activation.
Je trouve difficile de travailler avec WordPress sans WP-CLI, en général c'est un outil très utile pour de nombreuses tâches courantes liées à WordPress.
la source
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 :)
la source
Juste pour clarifier depuis le message d'origine.
La façon dont j'ai trouvé le plugin de plugin est d'abord de naviguer vers votre dossier de plugin, puis d'ouvrir le dossier associé au plugin, et enfin de trouver le fichier qui contient le code ci-dessous. Une fois que vous avez trouvé ce fichier, le nom du fichier moins l'extension doit être votre plugin plugin.
Par exemple, si j'ai trouvé le code ci-dessous dans un fichier nommé advanced-plugin-awesomeness.php, mon slug serait advanced-plugin-awesomeness.
J'espère que cela t'aides!
la source
Malheureusement, le slug est renvoyé via l'API de mise à jour, la réponse à cette question n'est pas si évidente sauf si vous interrogez l'API elle-même. Cependant, si vous voulez voir une liste de vos plugins de plugins actuels et des données de plugins associées, vous pouvez simplement faire:
Mais, cela n'aura pas d'informations sur un plugin nouvellement installé pendant encore 12 heures, vous devrez faire quelque chose de différent pour ceux-ci, par exemple. utiliser une version modifiée du code de
wp_update_plugins
danswp-includes/update.php
...Après avoir fait cela pour le tester, il semble confirmer que, quel que soit le nom de fichier du plugin, l'emplacement ou les majuscules, c'est en fait le
Plugin Name
qui génère le slug de mise à jour, très probablement viasanitize_title
. Je pense donc que la bonne réponse devrait être:la source
Vous pouvez obtenir le nom du dossier du plugin (PHP5.3 +) en passant DIR à plugin_basename (), comme ceci:
la source
Essaye ça:
la source
Pour la plupart des plugins, le "slug" sera le même que le nom du répertoire. Bien que les utilisateurs de .org puissent définir le nom du répertoire comme ils le souhaitent.
la source