问题描述

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