#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' );
#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');
请检查以下链接以获取更多详细信息。
激活插件
评论
正如拉斯特所说,这不是很“安全”。您应该确保以这种方式激活的插件是安全的/不会破坏您的网站。
– 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