Call to undefined function is_plugin_active()
。我可以调用add_action和add_filter。我应该检查/更改以解决此问题?这是在“插件”页面上的管理员内部发生的。在我的主插件文件顶部,
if (function_exists('is_plugin_active')) {
始终返回false。我也看不到其他插件中主插件文件中的功能(如果有帮助的话)。 />
#1 楼
这是因为定义了is_plugin_active()的文件-wp-admin/includes/plugin.php
-仅在插件加载后才在admin中加载。 br /> function check_some_other_plugin() {
if ( is_plugin_active('some-plugin.php') ) {
...
}
}
add_action( 'admin_init', 'check_some_other_plugin' );
评论
如果我已经在管理员中,是否有可能配置错误的东西使我无法访问此文件?
–卡尔
2011-02-15 14:03
查看最新答案。
–抄写员
11年4月30日在0:06
#2 楼
您也可以在模板中以及在用户页面中调用is_plugin_active(),这对于相关的插件很有用(即,要求插件“ xyz”才能操作我的新插件)。您需要按照Codex上is_plugin_active()文档中的说明手动包含plugin.php文件。在调用附加对象之前处于活动状态。它需要某些插件和过滤器才能在基本插件中使用,否则它将崩溃。一个活动的管理员登录,这很可能是因为您在admin_init触发之前进行了测试。 admin_menu在admin_init之前触发,并且在admin_menu中进行测试之前已经“咬伤”了我。因为已经运行了admin_menu,所以名称“ admin_init”对我来说似乎违反直觉。我认为init是“要运行的第一件事” ...也许admin_kinda_init()会更好。 :)评论
添加include_once(ABSPATH.'wp-admin / includes / plugin.php');为我做了把戏。谢谢!
–戴夫
'18 Apr 12在0:42
#3 楼
一种快速而肮脏的解决方法是手动复制该功能:if ( ! function_exists( 'is_plugin_active' ) ) {
function is_plugin_active( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
}
它很短,因此在您自己的代码中实现该解决方案应该不太困难。
#4 楼
我更喜欢Tom Auger的答案,即如何定义自己的is_plugin_active函数,而不是包括plugin.php。但是,使用相同的函数名称导致我的管理区域崩溃。使用其他函数名称解决了该问题:function is_plugin_active_byme( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
评论
我同意。尽管您可以在函数声明中检查冲突,但WP不会,因此WP将触发错误。
–克里斯·斯普拉格(Chris Sprague)
'18 Sep 9'在10:54
#5 楼
简单容易。取自WPif ( ! function_exists( 'is_plugin_active' ) )
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
,然后从
if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {
}
的任何实例获取功能检查。所以没有更多的错误。
评论
如果您正在使用requireonce,则可能不需要检查该功能...?
– Phill Healey
17 Mar 23 '17 at 20:07
这样做是为了确保在尝试使用插件之前已定义该插件,否则可能会遇到麻烦。
– Spencer Labadie
19年2月19日在18:06
#6 楼
您在管理员或前端内部使用is_plugin_active
?我很确定is_plugin_active
只是wp-admin / includes / plugin.php中的管理功能。 另外,您的主插件文件是否使用Wordpress文件头?加载上述plugin.php文件后,是否包含您的插件?
评论
这是在“插件”页面上的管理员内部进行的。该插件确实具有建议的WP文件头。如何检查plugin.php之后是否包含该插件?
–卡尔
2011-02-15 14:02
#7 楼
要调试活动的插件:var_dump(get_option(...));
要检查特定的插件:
in_array(get_option(...));
调用该动作“
active_plugins
” IIRC。#8 楼
如果您正在使用elementor且仅在前端遇到问题并且它在编辑器视图中起作用。if ( \Elementor\Plugin::$instance->editor->is_edit_mode() && is_plugin_active('some-plugin.php') ) {
return true;
} else {
return false;
}
#9 楼
您可以检查插件是否处于活动状态,如下所示:/**
* 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
}
#10 楼
这些解决方案都不适合我,但这确实可行:include_once('wp-admin/includes/plugin.php');
我在codebangers.com上找到了此解决方案
评论
从您的描述中我不确定-如果这是激活的插件是否有问题,或者您是在激活时还是在其他特定条件下尝试执行某些操作?我发现,如果在方法外部从主插件文件调用function_exists('is_plugin_active')为false,但在为Activated_plugin动作调用的方法内部则为true。
您在哪一页上看到错误?插件页面(wp-admin / plugins.php)?这是在激活相关插件之前还是之后?腊斯特有一个好处。您知道在什么时候用wordpress调用函数吗?
激活插件后,我在wp-admin / plugins.php上看到错误。我已经检查了一些作为动作挂钩的方法,并且可以在其中运行。似乎与包含顺序有关。
插件是按字母顺序加载的,因此可能仅仅是因为您的插件没有得到足够的早期处理。尝试重命名您的插件,使其以字母a(例如a_myplugin-name)开头,以便更早加载。但是,最好的选择是从加载插件后运行的函数中调用function_exists块。您可以在WP Codex上看到大致运行顺序:codex.wordpress.org/Plugin_API/Action_Reference