web-dev-qa-db-fra.com

Fonctionnalité commune entre mes propres plugins

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?

4
ptf

1.

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.

2.

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.

3.

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:

  • utiliser des tables personnalisées dans WordPress est parfois utile, mais si votre application nécessite trop de tables personnalisées, probablement WordPress n’est pas la bonne base, il existe de très jolis frameworks ( Symphony , Laravel , Sylex et plus)
  • avant d’écrire une fonctionnalité personnalisée, regardez les énormes plugins WordPress disponibles, il y en a probablement un qui fait déjà ce dont vous avez besoin
  • lorsque vous écrivez une fonctionnalité WordPress personnalisée, n'oubliez pas qu'il ne s'agit pas d'une application autonome, elle sera utilisée dans WordPress avec d'autres thèmes et plug-ins. Par conséquent, pour préserver le bon fonctionnement de l'application, vous devez suivre certaines règles de coexistence , par exemple utilisez le bon crochet pour des tâches spécifiques. Ou, juste pour dire quelque chose sur la tâche spécifique, si vous avez besoin de créer une table personnalisée, utilisez db_delta
  • Créer un plugin juste pour une fonction, je ne pense pas que ce soit une bonne idée: pour utiliser un plugin d’une autre, il faut faire quelques efforts et ne vaut pas la peine pour une seule fonction. S'il y a certaines fonctions génériques que vous utilisez dans vos plugins, vous pouvez créer un plugin qui les contient tous ...

4.

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:

4.1: créez simplement différents plugins et installez-les tous

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 );
  }
});

4.2: Compositeur

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.

6
gmazzap