Je développe quelques plugins open-source et un thème (faisant tous partie d'une "suite") qui utilisent tous la même bibliothèque tierce PHP. Je me demande quel est le meilleur moyen de l'inclure dans Wordpress. Voici quelques réflexions:
wp-content
Des idées à ce sujet?
Si chaque plugin/thème fonctionne seul, alors vous devriez probablement laisser tomber la bibliothèque dans chaque thème/plugin.
Il suffit ensuite de vérifier si une classe ou une fonction de la bibliothèque tierce existe avant de l'exiger.
<?php
if( class_exists( 'SomeClass' ) )
{
// require/include here
}
ou
<?php
if( function_exists( 'some_function' ) )
{
// Require/include stuff here
}
Alternativement, vous pouvez envelopper chaque fonction/classe/variable/constante de la bibliothèque tierce dans une vérification pour voir si elle existe, comme fonctions enfichables .
Si tous les plugins et le thème dépendent l'un de l'autre, cela n'a pas vraiment de sens de les diviser et vous devriez probablement repenser à cela.
Liez tout le code dépendu à une action dans le plugin library.
Exemple de code pour le plugin library:
add_action( 'plugins_loaded', 'load_library', 0 );
function load_library()
{
# load all the classes and files you need
# Set up $plugin_url and $plugin_directory
do_action( 'library_loaded', $plugin_url, $plugin_directory );
}
Dans votre code dépendu, ne faites rien avant le lancement de l'action:
add_action( 'library_loaded', 'start_my_code', 10, 2 );
function start_my_code( $lib_url, $lib_directory )
{
# do stuff
}
La bibliothèque gère toutes les parties de base: vérifiez la version PHP correcte, les constantes WordPress, les configurations multi-sites, etc.
L'autre code ne fera rien si l'action 'library_loaded'
n'est pas appelée.
Ajoutant à répondre par chrisguitarguy, si vos bibliothèques sont sous la forme de classes PHP, vous pouvez utiliser spl_autoload_register () pour charger ces classes si elles n’ont pas déjà été chargées par un autre plugin. Vous pouvez ensuite regrouper les bibliothèques dans votre plug-in et les utiliser, en vous fiant au chargeur de classes pour les inclure le cas échéant. Vous pouvez également utiliser le chargeur de classes pour charger les classes de votre propre plugin.
par exemple.
define('WPSE_31726_PLUGIN_ROOT', dirname(__FILE__) . '/');
/**
* autoload classes as/when needed
* @param string $class_name name of class to attempt to load
*/
function wpse_31726_autoload($class_name) {
static $classMap = array (
'Wpse31726_Admin' => 'class.Wpse31726_Admin.php',
'Wpse31726_CsvLoader' => 'class.Wpse31726_CsvLoader.php',
'Wpse31726_Plugin' => 'class.Wpse31726_Plugin.php',
'parseCSV' => 'lib/parsecsv/parsecsv.lib.php',
);
if (isset($classMap[$class_name])) {
require WPSE_31726_PLUGIN_ROOT . $classMap[$class_name];
}
}
// register function for autoloading required classes
spl_autoload_register('wpse_31726_autoload');
Etant donné que il n’existe pas de répertoire officiel des fournisseurs , je choisirais le plug-in "core" qui n'inclut que la bibliothèque. Vous faites alors en sorte que vos plugins nécessitent ce plugin principal.
Mettre la bibliothèque dans l'un de vos plugins réels nécessiterait que l'utilisateur active ce plugin, même s'ils ne veulent jamais utiliser ses fonctionnalités. Un plugin de base séparé semble plus propre.
Le placer directement dans wp-content ressemble à la pire des solutions.