web-dev-qa-db-fra.com

is_plugin_active () renvoie false sur le plugin actif

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?

6
Brian

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
}
18
fuxia

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 );
}
2
Aamer Shahzad