J'ai donc les éléments suivants dans une inclusion dans mon fichier de thème:
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php' ) ) {
$shop_id = woocommerce_get_page_id( 'shop' );
$shop_page = get_page( $shop_id );
}
mais is_plugin_active( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')
renvoie false, malgré le fait que le plugin soit actif.
Je me demande si is_plugin_active()
pourrait être déclenché par le personnalisateur de thème, car le fait que je le fasse alors que je suis connecté à customize_preview_init
est le seul piège que je puisse imaginer qui poserait problème. Des idées?
is_plugin_active()
attend seulement le nom de base du plugin en tant que paramètre:
Alors utilisez:
is_plugin_active( 'woocommerce/woocommerce.php' );
La fonction utilisera l'option 'active_plugins'
qui est déjà une liste de chemins de plugins relatifs au répertoire de plugins.
Sur une installation multi-site, il cherchera aussi dans get_site_option( 'active_sitewide_plugins')
.
En tant que note d'implémentation: évitez ces vérifications. Certains utilisateurs renomment des noms de plugins ou des répertoires. Testez les fonctions que vous utiliserez réellement, par exemple:
if ( function_exists( 'woocommerce_get_page_id' ) )
{
// do something
}
si vous ne savez pas quels plugins sont actifs, vous pouvez faire ce qui suit.
// get array of active plugins
$active_plugins = (array) get_option( 'active_plugins', array() );
// see active plugins 'plugin-dir-name/plugin-base-file.php'
echo '<pre>';
print_r( $active_plugins );
echo '</pre>';
if ( ! empty( $active_plugins ) && in_array( 'plugin-dir-name/plugin-base-file.php', $active_plugins ) ) {
// do something if plugin is active
}
pour référence, jetez un coup d'œil à la fonction is_plugin_active dans 'wp-admin/includes/plugin.php'
function is_plugin_active( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) || is_plugin_active_for_network( $plugin );
}