問題描述
如果可能,從其他插件中可以激活安裝的插件 (意味着文件已被放置在 wp-content /plugins 目錄中) 嗎?
最佳解決方案
這是我在一些網絡應用程序中所做的:
function run_activate_plugin( $plugin ) {
$current = get_option( 'active_plugins' );
$plugin = plugin_basename( trim( $plugin ) );
if ( !in_array( $plugin, $current ) ) {
$current[] = $plugin;
sort( $current );
do_action( 'activate_plugin', trim( $plugin ) );
update_option( 'active_plugins', $current );
do_action( 'activate_' . trim( $plugin ) );
do_action( 'activated_plugin', trim( $plugin) );
}
return null;
}
run_activate_plugin( 'akismet/akismet.php' );
次佳解決方案
插件激活過程被編碼為使用 WP 管理界面。它執行一些檢查以防止啓用帶有錯誤的插件 (加載啓動可能會中斷 WP) 。
它由 activate_plugin()功能 (source) 處理,在其他地方被記錄為不可用。
所以如果你想通過代碼來激活插件,目標本身就比較容易 – 更改 active_plugins 選項來包含該插件。但是,您將不得不從頭開始使用 re-create 相關的激活鈎,並且在沒有沙箱步驟的情況下激活可能會破壞網站。
第三種解決方案
插件存儲在’active_plugins’ 選項中的數組中。該數組包含活動的每個插件的文件路徑。
要激活插件,您需要確定它的路徑是什麼,然後將該路徑傳遞給 activate_plugin($plugin_path)。
這比説起來容易,但是 (至少在 2.9) 核心代碼並不容易。
在您可以使用 activate_plugin() 之前,需要從 wp-admin /includes /中添加 plugin.php 文件。您還應檢查以確保您的插件尚未處於活動狀態。結果看起來像這樣 (YMMV):
// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
return;
// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);
我在 WP 2.9 中使用這個生產,沒有任何重大問題,但在我的測試中,WPMU 有非常意想不到的結果,所以請注意在網絡安裝上使用這個結果。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。