Is_plugin_active函数不存在

时间:2011-02-14 作者:Carl

我正在使用WordPress 3.0.5,并用3.1rc4进行了测试。在插件的主PHP文件中,当我尝试调用is_plugin_active时Call to undefined function is_plugin_active(). 我可以调用add\\u action和add\\u filter。我应该检查/更改什么来修复此问题?

这是在插件页面上的管理员内部发生的。在我的主插件文件的顶部,if (function_exists(\'is_plugin_active\')) { 它总是返回false。

我在其他插件中也看不到我的主插件文件中的函数(如果有帮助的话)。

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

这是因为定义了is\\u plugin\\u active()的文件-wp-admin/includes/plugin.php - 只有在插件加载后,才会在管理中加载。

因此,您只能在启动“admin\\u init”后调用它:

function check_some_other_plugin() {
  if ( is_plugin_active(\'some-plugin.php\') ) {
    ...
  }
}
add_action( \'admin_init\', \'check_some_other_plugin\' );

SO网友:Lance Cleveland

您可以在模板和用户页面中调用is\\u plugin\\u active(),这对相关插件很有用(即需要插件“xyz”来操作我的新插件)。您需要手动包含插件。php文件,如Codex上的is\\u plugin\\u active()文档所述。

下面是我在premium附加包中使用的一个功能示例,用于确保在调用附加对象之前free base插件处于活动状态。它需要某些挂钩和;过滤器在基本插件中可用,否则它将崩溃。

include_once(ABSPATH.\'wp-admin/includes/plugin.php\');
if (!function_exists(\'is_plugin_active\') || !is_plugin_active(\'store-locator-le/store-locator-le.php\')) { 
   return;
}
另一方面,如果您在活动admin登录中遇到is\\u plugin\\u active()问题,可能是因为您正在admin\\u init启动之前进行测试。admin\\u菜单在admin\\u init之前触发,在admin\\u菜单中进行测试之前“咬”过我。“admin\\u init”这个名称对我来说似乎有违直觉,因为admin\\u菜单已经运行了。我认为init是“运行的第一件事”。。。也许admin\\u kinda\\u init()会更好。:)

SO网友:Tom Auger

一种快速而肮脏的解决方法是手动复制该功能:

if ( ! function_exists( \'is_plugin_active\' ) ) {
    function is_plugin_active( $plugin ) {
        return in_array( $plugin, (array) get_option( \'active_plugins\', array() ) );
    }
}
它很短,所以作为一种变通方法,在您自己的代码中实现应该不会太困难。

SO网友:Jeroen

我更喜欢Tom Auger的答案,即如何定义自己的is\\u plugin\\u活动函数,而不是包含插件。php。然而,使用相同的函数名导致我的管理区域崩溃。使用不同的函数名解决了此问题:

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

SO网友:Spencer Labadie

简单易用。摘自WP

if ( ! function_exists( \'is_plugin_active\' ) )
     require_once( ABSPATH . \'/wp-admin/includes/plugin.php\' );
然后是

 if ( is_plugin_active( \'feed-them-social/feed-them.php\' ) ) {

   }
获取功能检查。这样就不会再有错误了。

SO网友:hakre

要调试活动插件,请执行以下操作:

var_dump(get_option(...));
要检查特定插件,请执行以下操作:

in_array(get_option(...));
该操作被称为“active_plugins“IIRC。

SO网友:Jonnybojangles

您正在使用is_plugin_active 在admin内部还是前端?我很确定is_plugin_active 是wp admin/INCLUDE/plugin中唯一的管理函数。php。

此外,您的主插件文件是否使用Wordpress File Header? 您的插件是否包含在上述插件之后。php文件是否已加载?

SO网友:actuallyakash

如果您正在使用elementor,并且只在前端面对问题,并且它在编辑器视图中工作。

您可以使用is_edit_mode() elementor的函数,因此该条件将仅在编辑器视图中运行。

if ( \\Elementor\\Plugin::$instance->editor->is_edit_mode() && is_plugin_active(\'some-plugin.php\') ) {
    return true;
} else {
    return false;
}

SO网友:Faruk

您可以按以下方式检查插件是否处于活动状态:

/**
 * Check if Some Plugin is active
 **/
if ( in_array( \'some-plugin/some-plugin.php\', apply_filters( \'active_plugins\', get_option( \'active_plugins\' ) ) ) ) {
    // Put your plugin code here
}

SO网友:fenderflip

这些解决方案对我都不起作用,但这确实起到了作用:

include_once(\'wp-admin/includes/plugin.php\');
我在找到此解决方案codebangers.com

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?