Is_plugin_active()在活动插件上返回FALSE

时间:2013-05-14 作者:Brian

因此,我的主题文件中包含以下内容:

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 );
}
但是is_plugin_active( WP_PLUGIN_DIR . \'/woocommerce/woocommerce.php\') 返回false,尽管插件处于活动状态。

我想知道is_plugin_active() 可能会被主题定制者绊倒,因为我在做这件事的时候customize_preview_init 这是我能想象到的唯一会引起问题的问题。有什么见解吗?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

is_plugin_active() 只需要插件的基本名称作为参数:

因此,请使用:

is_plugin_active( \'woocommerce/woocommerce.php\' );
该功能将使用该选项\'active_plugins\' 这是相对于插件目录的插件路径列表。

在多站点安装中,它将在get_site_option( \'active_sitewide_plugins\')

作为实现注意事项:避免这些检查。一些用户重命名插件名称或目录。测试您实际使用的功能,例如:

if ( function_exists( \'woocommerce_get_page_id\' ) )
{
    // do something
}

SO网友:Aamer Shahzad

如果您不知道哪些插件处于活动状态,可以执行以下操作。

// 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
}
请查看“wp admin/includes/plugin”中的is\\u plugin\\u活动函数以供参考。php\'

function is_plugin_active( $plugin ) {
    return in_array( $plugin, (array) get_option( \'active_plugins\', array() ) ) || is_plugin_active_for_network( $plugin );
}

结束