問題描述
我使用的是 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。