问题描述
我使用的是 WordPress 3.0.5,并已经使用 3.1rc4 进行了测试。在我的插件的主要 PHP 文件中,当我尝试调用 is_plugin_active 时,我得到 Call to undefined function is_plugin_active()
。我可以调用 add_action 和 add_filter 。我该怎么检查/更改来解决这个问题?
这是在插件页面上的管理员内部发生的。在我的主要插件文件的顶部,我有,if (function_exists('is_plugin_active')) {
总是返回 false 。
我也看不到其他插件中的主要插件文件的功能 (如果这有帮助的话) 。
最佳解决方案
这是因为在加载插件后,只能加载管理员中的 is_plugin_active() 的文件–wp-admin/includes/plugin.php
。
因此,您只能在’admin_init’ 触发之后调用它:
function check_some_other_plugin() {
if ( is_plugin_active('some-plugin.php') ) {
...
}
}
add_action( 'admin_init', 'check_some_other_plugin' );
次佳解决方案
您可以在模板和用户页面中调用 is_plugin_active(),这对于相关的插件 (即需要插件’xyz’ 来操作我的新插件) 可能很有用。您需要手动添加 plugin.php 文件,如在食典中的 is_plugin_active() 文档中所述。
这是一个在我的高级 add-on 包中使用的功能示例,以确保在调用 add-on 对象之前,可用的基本插件是活动的。它需要一些钩子过滤器在基本插件中可用,否则将崩溃。
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;
}
除此之外,如果您在活动的管理员登录中遇到了 is_plugin_active() 问题,可能是因为您在 admin_init 触发之前进行测试。 admin_menu 在 admin_init 之前触发,并在 admin_menu 中进行测试,之前已经有”bitten” 我。自从 admin_menu 已经运行以来,我的名字”admin_init” 似乎是 counter-intuitive 。我认为 init 是 「运行的第一件事」… 可能 admin_kinda_init() 会更好。 🙂
第三种解决方案
快速而肮脏的解决方法是手动复制功能:
function is_plugin_active( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
它很简短,所以在你自己的代码中实现一个解决方法不是太难了。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。