Answers:
这是我在某些网络应用中所做的事情:
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' );
activate_plugin()
,它似乎也可以正常工作。
插件存储在数组中的“ active_plugins”选项中。该数组包含每个活动插件的文件路径。
要激活插件,您需要确定其路径,然后将该路径传递给 activate_plugin($plugin_path)
。
这说起来容易做起来难,而且(至少在2.9中)核心代码并不容易。
必须先包含wp-admin / includes /中的plugin.php文件,然后才能激活Activate_plugin()。您还应该检查以确保您的插件尚未激活。结果看起来像这样(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产生了非常意外的结果,因此请注意在网络安装中使用此功能。
根据WP Codex,Wordpress提供了用于激活插件的功能
function plugin_activation( $plugin ) {
if( ! function_exists('activate_plugin') ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if( ! is_plugin_active( $plugin ) ) {
activate_plugin( $plugin );
}
}
plugin_activation('akismet/akismet.php');