Pourquoi ?
Il est fréquent lors d’un développement sous WordPress de dépendre de la présence une autre extension. Cela arrive précisément lors de la création d’une extension « add-on » d’une autre, ou lors de la conception d’un site web complexe dans lequel plusieurs extensions interagissent entre elles.
Prenons l’exemple du développement d’une logique qui nécessite WooCommerce et MemberPress : un internaute peut acheter un produit uniquement s’il a souscrit un abonnement. Il sera nécessaire de vérifier au préalable que les extensions WooCommerce et MemberPress sont actives, au risque sinon de provoquer une erreur fatale sur le site, notamment au moment des mises à jour de ces dernières.
La solution
Vérifier que le plugin est actif avant l’appel de la fonction.
Un exemple d’implémentation :
/**
* Determines whether a plugin is active
*
* @param string $plugin_name plugin name corresponding with <plugin_name>/<plugin_name>.php or something/<plugin_name>.php or <plugin_name>/something.php
* @return boolean true if the named plugin is installed and active, otherwise false
*/
function is_active_plugin( $plugin_name ) {
$active_plugins = get_option( 'active_plugins' );
foreach ( $active_plugins as $active_plugin ) {
if ( strpos( $active_plugin, $plugin_name ) !== false ) {
return true;
}
}
return false;
}
/**
* This hook is fired once WP, all plugins, and the theme are fully loaded and instantiated.
*/
function wpblog_wp_loaded() {
if ( is_active_plugin( 'sukellos-admin-builder' ) ) {
// Does something
}
}
add_action( 'wp_loaded', 'wpblog_wp_loaded' );
Dans ce code, c’est la fonction is_active_plugin
qui nous est intéressante. L’appel à get_option( 'active_plugins' )
permet d’obtenir la liste des extensions actives. Le résultat se présente sous la forme d’un tableau, d’où le foreach
:
is_active_plugin $active_plugins: Array
(
[0] => simply-show-hooks/index.php
[2] => sukellos-admin-builder/sukellos-admin-builder.php
[3] => sukellos-basic-plugin/wp-sukellos-basic-plugin.php
[4] => sukellos-enable-classic-editor/sukellos-enable-classic-editor.php
)
Cette vérification pourra être faite à des moments clefs de l’exécution. Par exemple, lors du développement d’une extension A, cela peut être inséré au moment de son initialisation par WordPress : si l’extension requise B n’est pas active, alors l’extension A est désactivée.