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

#1 楼

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

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


评论


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

– sorich87
2010-11-14 15:46

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

–丹尼斯·伯纳迪(Denis de Bernardy)
2010-11-14 19:45



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

–杰克
2013年9月18日18:21

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

–unity100
18-10-24在1:38

只需发表评论以同意@ unity100并取消这些“不安全”的评论即可。这是一个非常好的方法。这是关于在何处以及如何使用它,这可能使它不安全。但这几乎适用于您从internetz复制的任何代码。

–maryisdead
20-04-24在10:44

#2 楼

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

activate_plugin()函数(源)处理,该函数在其他地方记录为无法使用。 />因此,如果您想通过代码激活插件,则目标本身相对容易-更改active_plugins选项以包括该插件。但是,您将不得不从头开始重新创建相关的激活挂钩,并且如果没有沙箱步骤就进行激活会冒着破坏站点的风险。

#3 楼

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

评论


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

–Ünsal Korkmaz
2012年8月25日上午10:59

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

–jerclarke
2012年8月28日在17:48

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

– Janus Troelsen
16年8月25日在9:45

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

–jerclarke
16年8月26日在14:57

#4 楼

根据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-10-28在14:59

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

– Ethan O'Sullivan
16-10-28在21:32

#5 楼

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

activate_plugin('akismet/akismet.php');


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

激活插件