J'ai lu que lors de la création de nouveaux types d'article, de la création d'une page de paramètres et de la création d'une nouvelle taxonomie, vous devriez créer un plug-in. Alors j'ai fait ça. Mais j'ai des fonctionnalités qui peuvent être généralisées ou identiques dans mes plugins. Un exemple de ceci serait la fonction qui enregistre dans la base de données. Puisque tout semble être placé dans la portée globale, s'il existe une telle chose en PHP, devrais-je créer un autre plugin avec des fonctionnalités partagées, ou mettre des fonctionnalités partagées dans le fichier functions.php
?
Tout d'abord, functions.php
est pour les thèmes, ce sont des choses différentes des plugins.
Dans WordPress, les thèmes doivent être utilisés pour la présentation uniquement, plug-in pour la fonctionnalité .
Si vous voulez vous can utilisez des thèmes pour la fonctionnalité, mais vous ne devriez pas. En fait, les thèmes et les plugins ne sont que des fichiers php qui sont chargés à un moment précis d'une requête WordPress. (WordPress charge juste un fichier, c’est functions.php pour les thèmes et le fichier de plugin principal pour les plugins, chargez tous les autres fichiers dont vous avez besoin).
Le problème est que dans WordPress, vous pouvez avoir un nombre non limité de plugins, mais un seul thème. Donc, si vous voulez changer le thème et que vous avez une fonctionnalité sur functions.php
, vous le perdrez: en quelques mots, voilà pourquoi il est préférable de mettre la fonctionnalité sur les plugins et d’utiliser le thème pour la présentation uniquement.
Oui, tout le contenu principal de WordPress est dans l’espace de noms global et les variables globales sont largement utilisées, mais c’est le cœur, personne ne vous oblige à suivre les mêmes règles, vous pouvez utiliser des espaces de nom (si votre version est PHP 5.3+) et n’utilisez pas de variable globale: lorsque WordPress charge votre plugin, il charge un fichier PHP, de sorte que vous pouvez faire tout ce que vous pouvez faire avec la version de PHP: if vous voulez pouvoir écrire vous-même toutes les fonctionnalités, mais cela n’a aucun sens: vous utilisez WordPress à cause de toutes ses fonctionnalités; essayez donc d’utiliser des fonctions/classes de base lorsque ce dont vous avez besoin est couvert par le coeur, mais n'hésitez pas à écrire le PHP code qui fait ce que WordPress ne fait pas. Et pour ce faire, n'hésitez pas à utiliser toutes les techniques PHP que vous connaissez.
J'ai lu dans ta question
Un exemple de ceci serait la fonction qui enregistre dans la base de données
Je ne sais pas ce que vous enregistrez dans la base de données et pourquoi, mais si vous devez enregistrer WordPress entity : post, termes de taxonomie, méta, options, utilisateurs, transitoires ... WordPress a déjà des fonctions pour enregistrer et les récupérer tous dans la base de données, il n’est donc pas nécessaire d’écrire des fonctions personnalisées pour cela. Si vous voulez parler de tables personnalisées , oui, si vous le souhaitez, vous pouvez écrire du code abstrait et faciliter la création et la manipulation de tables personnalisées, mais dans ce cas:
Parlons maintenant de l'extraction d'une fonctionnalité commune d'un plugin à un autre. Oui, c’est faisable et, à mon humble avis, c’est parfaitement juste. Il y a différentes façons de le faire:
Comme déjà dit, les plugins ne sont que des fichiers php qui sont chargés à l’aide du require_once
à un moment précis du démarrage de WordPress, donc vraiment, quand 2 plugins sont installés, il n’ya pas de différence de 2 fichiers dans le même plugin et chargés par vous-même, ou deux les fichiers sont chargés par WordPress. Bien sûr, vous ne pouvez pas dire quel fichier est chargé en premier et qui plus tard, mais grâce aux points d'ancrage de WordPress, vous pouvez savoir quand tous les plugins sont chargés et commencer à faire quelque chose depuis ce moment. Bien sûr, avant d’utiliser une fonctionnalité placée dans un autre plugin, assurez-vous que le plugin/la fonctionnalité est disponible. Un code de preuve de concept:
// plugin-one.php
namespace PluginOne
class Foo {
function do_something () {
return 'Foo!';
}
}
// plugin-two.php
namespace PluginTwo
class Bar {
function do_something ( PluginOne\Foo $foo ) {
echo $foo->do_something();
}
}
add_action('plugins_loaded', function() {
// when WordPress fires 'plugins_loaded' all plugin files are required
// so we can check if the class PluginOne\Foo exists and use it
if ( class_exists( 'PluginOne\Foo' ) ) {
$bar = new Bar;
$bar->do_something( new PluginOne\Foo );
}
});
Je ne sais pas si vous avez déjà utilisé/entendu parler de Composer . C'est un outil de gestion de la dépendance.
Lorsque vous avez besoin d'écrire un plugin nécessitant un autre plugin, si les deux prennent en charge Composer, vous n'aurez qu'à ajouter une ligne dans le fichier composer.json
.
Comment utiliser Composer pour les plugins n'est pas complexe, mais trop complexe pour une réponse ici.
Au cours des derniers mois, l'intérêt pour Composer a grandi dans la communauté WordPress (dans la communauté PHP, elle a grandi il y a quelque temps), et vous pouvez maintenant trouver des ressources utiles. Commencez à regarder composer.rarst.net , c'est une ressource partagée par Rarst , l'un des mods de ce site.