问题描述
如果可能,从其他插件中可以激活安装的插件 (意味着文件已被放置在 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。