La tâche
Vous pouvez enregistrer des répertoires de thèmes supplémentaires en utilisant register_theme_directory()
pour votre installation WP. Malheureusement, le noyau ne fournit pas la même fonctionnalité pour les plugins. Nous avons déjà MU-Plugin, Drop-Ins, Plugins et Thèmes. Mais nous avons besoin de plus pour une meilleure organisation des fichiers.
Voici la liste des tâches à accomplir:
- Ajouter un répertoire de plugin supplémentaire
- Pour chaque répertoire de plugin, un nouvel "onglet" est nécessaire, comme indiqué ici [1]
- Le répertoire supplémentaire aurait les mêmes fonctionnalités que le répertoire du plugin par défaut
Qu'y a-t-il pour vous?
La meilleure et la plus complète des réponses se verra attribuer une prime.
[1] Onglet supplémentaire pour un nouveau dossier / répertoire de plugin
get_themes()
dans une classe.Réponses:
D'accord, je vais tenter un coup. Quelques limitations que j'ai rencontrées en cours de route:
Il n'y a pas beaucoup de filtres dans les sous-classes de WP_List_Table, du moins aucun endroit où nous en avons besoin.
En raison de ce manque de filtres, nous ne pouvons pas vraiment maintenir une liste précise des types de plugins en haut.
Nous devons également utiliser des hacks JavaScript géniaux (read: dirty) pour afficher les plugins comme actifs.
J'ai enveloppé mon code d'administrateur dans une classe afin que mes noms de fonctions ne soient pas préfixés. Vous pouvez voir tout ce code ici . S'il vous plaît contribuer!
API centrale
Juste une simple fonction qui configure une variable globale qui contiendra nos répertoires de plugins dans un tableau associatif. Cela
$key
va être quelque chose utilisé en interne pour chercher des plugins, etc.$dir
est soit un chemin complet, soit quelque chose de relatif auwp-content
répertoire.$label
va être pour notre affichage dans la zone d'administration (par exemple, une chaîne traduisible).Ensuite, bien sûr, nous devons charger les plugins. Accédez
plugins_loaded
tardivement et parcourez les plugins actifs, en les chargeant chacun.Zone Admin
Mettons en place nos fonctionnalités dans une classe.
Nous allons nous atteler
plugins_loaded
très tôt et mettre en place les "actions" autorisées que nous utiliserons. Ceux-ci géreront l'activation et la désactivation du plug-in, car les fonctions intégrées ne peuvent pas le faire avec des répertoires personnalisés.Ensuite, il y a la fonction accrochée dans
load-plugins.php
. Cela fait toutes sortes de choses amusantes.Passons en revue cette chose à la fois. la
get_plugins
méthode est une enveloppe autour d'une autre fonction. Il remplit l'attributplugins
avec des données.cd_apd_get_plugins
est une arnaque de laget_plugins
fonction intégrée sans le codé en durWP_CONTENT_DIR
et lesplugins
affaires. Fondamentalement: récupérez le répertoire depuis le$wp_plugin_directories
global, ouvrez-le, recherchez tous les fichiers du plugin. Stockez-les dans la mémoire cache pour plus tard.La prochaine étape consiste à activer et à désactiver les plugins. Pour ce faire, nous utilisons la
handle_actions
méthode. Ceci, encore une fois, est arraché de manière flagrante au sommet duwp-admin/plugins.php
fichier principal .Quelques fonctions personnalisées ici encore.
cd_apd_activate_plugin
(arraché deactivate_plugin
) etcd_apd_deactivate_plugins
(arraché dedeactivate_plugins
). Les deux sont les mêmes que leurs fonctions "parent" respectives sans les répertoires codés en dur.Et la fonction de désactivation
Il y a aussi la
cd_apd_validate_plugin
fonction, qui bien sûr, est une arnaquevalidate_plugin
sans ordure dure.D'accord, avec ça à l'écart. Nous pouvons réellement commencer à parler de la affichage de liste
Étape 1: ajoutez nos vues à la liste en haut du tableau. Ceci est fait en filtrant à l'
views_{$screen->id}
intérieur de notreinit
fonction.Ensuite, la fonction accrochée passe en boucle
$wp_plugin_directories
. Si l'un des répertoires nouvellement enregistrés contient des plugins, nous l'inclurons dans l'affichage.La première chose à faire si nous visionnons une page de répertoire de plugin personnalisée est de filtrer à nouveau les vues. Nous devons nous débarrasser de la
inactive
décompte, car il ne sera pas précis. Une conséquence de l'absence de filtres là où nous en avons besoin. Accrocher à nouveau ...Et un rapide non réglé ...
Ensuite, supprimons les plugins que vous auriez autrement vus dans la liste, et remplacez-les par nos plugins personnalisés. Crochet dans
all_plugins
.Puisque nous avons déjà configuré nos plugins et nos données (voir
setup_plugins
ci - dessus), lafilter_plugins
méthode just (1) enregistre le nombre de tous les plugins pour plus tard, et (2) remplace les plugins dans la liste.Et maintenant, nous allons tuer les actions en masse. Ceux-ci pourraient facilement être pris en charge, je suppose?
Les liens des actions de plug-in par défaut ne vont pas fonctionner pour nous. Nous devons donc créer nos propres actions (avec les actions personnalisées, etc.). Dans la
init
fonction.Les seules choses qui changent ici sont (1) nous changeons les actions, (2) conservons le statut du plug-in et (3) modifions un peu les noms de nonce.
Et enfin, nous avons juste besoin de mettre en file d'attente du JavaScript pour couronner le tout. Dans la
init
fonction à nouveau (tous ensemble cette fois).Lors de la mise en file d'attente de notre serveur JS, nous utiliserons également
wp_localize_script
la valeur du nombre total de "tous les plugins".Et bien sûr, le JS n'est que quelques astuces pour obtenir l'affichage correct des plugins active / inactive de la table de liste. Nous allons également réintégrer le nombre correct de plugins dans le
All
lien.Emballer
Le chargement réel de répertoires de plugins supplémentaires est assez peu excitant. Obtenir la table de liste pour afficher correctement est la partie la plus difficile. Je ne suis toujours pas complètement satisfait du résultat, mais peut-être que quelqu'un peut améliorer le code
la source
__return_empty_array()
.__return_empty_array
fonction!Personnellement, je n'ai aucun intérêt à modifier l'interface utilisateur, mais j'aimerais une structure de système de fichiers plus organisée, pour plusieurs raisons.
À cette fin, une autre approche consisterait à utiliser des liens symboliques.
Vous pouvez configurer vos plugins personnalisés dans
plugins-custom
, qui pourraient faire partie du référentiel de contrôle de version de votre projet.Vous pouvez ensuite installer des dépendances tierces dans
plugins-external
(via les sous-modules Composer, Git ou ce que vous préférez).Ensuite, vous pouvez avoir un simple script Bash ou une commande WP-CLI qui analyse les répertoires supplémentaires et crée un lien symbolique dans
plugins
pour chaque sous-dossier trouvé.plugins
serait toujours encombré, mais cela n’aurait pas d’importance parce que vous n’auriez besoin que d’interagir avecplugins-custom
etplugins-external
.La mise à l'échelle de
n
répertoires supplémentaires suivrait le même processus que les deux premiers.la source
Vous pouvez également utiliser COMPOSER avec un chemin de répertoire personnalisé défini pour pointer vers le dossier wp-content. Si ce n’est pas une réponse directe à votre question est une nouvelle façon de penser wordpress, passez au compositeur avant qu’il ne vous mange.
la source