如何通过代码激活插件?


22

如果可能,如何从其他插件激活已安装的插件(意味着文件已放置在wp-content / plugins目录中)?

Answers:


30

这是我在某些网络应用中所做的事情:

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' );

1
正如拉斯特所说,这不是很“安全”。您应该确保以这种方式激活的插件是安全的/不会破坏您的网站。
sorich87 2010年

10
甚至根本不安全,但是,如果您以编程方式激活它们,那应该知道您在做什么。;-)
Denis de Bernardy 2010年

除了安全性-我的意思是,这不是问题的一部分,对吧?-我喜欢sorich的方法,因为它称为标准激活过滤器。因此,如果有插件,插件将进行更改以运行其设置例程。
hakre 2010年

3
至少在最近,这正在重新发明轮子。我已经使用了内置的activate_plugin(),它似乎也可以正常工作。
杰克

1
@SagiveSEO完全安全-与WP相似,只是需要用户输入/批准并形成现时并检查这些现时-只是引入必要的检查以在任何地方启动该功能-以便不能从外部(从网络等),并且不能以任何方式随机调用它。
unity100 '18 -10-24

13

插件激活过程经过编码,可以与WP管理界面一起使用。它执行一些检查以防止启用带有错误的插件(在启动时加载此类文件可能会破坏WP)。

activate_plugin()功能处理()在其他地方记录为无法使用。

因此,如果您想通过代码激活插件,则目标本身相对容易-更改active_plugins选项以包括该插件。但是,您将不得不从头开始重新创建相关的激活挂钩,并且如果没有沙盒步骤就无法激活,因此冒着破坏站点的风险。


7

插件存储在数组中的“ 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产生了非常意外的结果,因此请注意在网络安装中使用此功能。


很长一段时间过去了,但是如果您还记得的话,这是出乎意料的结果吗?
Ünsal科尔克马兹

我完全不记得了。我认为这只是行不通,我是手工做的,因为我没有太多的MS网站。
jerclarke

我该如何执行呢?如果我直接执行,则未定义get_option ...
Janus Troelsen

将其添加到functions.php中,它应该可以工作,尽管即使这样,您也应该始终在函数中放入内容并将其挂接到“ init”或“ wp”。
jerclarke '16

3

根据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');

伊桑,我的答案出了什么问题?
Mowshon '16

尽管仅发布代码即可获得答案,但对于阅读您的答案的任何新程序员而言,可能都难以解释。这样,OP可以更好地了解您的代码如何工作。
伊桑·金克斯·奥沙利文

0

您可以简单地调用WordPress默认功能。

activate_plugin('akismet/akismet.php');

请检查下面的链接以获取更多详细信息。

激活插件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.