Ответы:
Вот как я это сделал в некоторых веб-приложениях:
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' );
activate_plugin()
, и, кажется, работает так же.
Процесс активации плагина закодирован для работы с интерфейсом WP администратора. Он выполняет некоторые проверки, чтобы предотвратить включение плагинов с ошибками (загрузка при запуске может привести к поломке WP).
Он обрабатывается activate_plugin()
функцией ( источником ), которая задокументирована как непригодная для использования в другом месте.
Поэтому, если вы хотите активировать плагин кодом, сама цель относительно проста - изменить active_plugins
вариант включения этого плагина. Но вам придется заново создавать связанные хуки активации с нуля, и вы рискуете взломать сайт, активировав его без шага песочницы.
Плагины хранятся в массиве в опции 'active_plugins'. Массив содержит путь к файлу для каждого активного плагина.
Чтобы активировать плагин, вам нужно определить, каким будет его путь, а затем передать этот путь activate_plugin($plugin_path)
.
Это легче сказать, чем сделать, и (по крайней мере, в 2.9) основной код не делает это легким.
Прежде чем вы сможете активировать_plugin (), вам нужно включить файл plugin.php из wp-admin / includes /. Вы также должны убедиться, что ваш плагин еще не активен. Результат выглядит примерно так (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, так что будьте осторожны, используя это при сетевых установках.
Wordpress предоставляет функцию для активации плагинов, согласно WP Codex
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');
Вы можете просто вызвать функцию WordPress по умолчанию.
activate_plugin('akismet/akismet.php');
Пожалуйста, проверьте ссылку ниже для более подробной информации.