Respuestas:
Así es como lo hice en algunas aplicaciones web:
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()
, y parece funcionar igual.
El proceso de activación del complemento está codificado para funcionar con la interfaz de administración de WP. Realiza algunas comprobaciones para evitar habilitar complementos con errores (cargarlos al inicio puede interrumpir WP).
Se maneja por la activate_plugin()
función ( fuente ) que está documentada como inutilizable en otros lugares.
Entonces, si desea activar el complemento por código, el objetivo en sí es relativamente fácil: cambiar la active_plugins
opción para incluir ese complemento. Pero tendrá que volver a crear ganchos de activación relacionados desde cero y se arriesgará a romper el sitio al activarlo sin el paso de sandbox.
Los complementos se almacenan en una matriz en la opción 'active_plugins'. La matriz contiene la ruta del archivo a cada complemento que está activo.
Para activar un complemento, debe determinar cuál será su ruta y luego pasar esa ruta a activate_plugin($plugin_path)
.
Sin embargo, esto es más fácil decirlo que hacerlo, y (al menos en 2.9) el código central no lo hace fácil.
Antes de que puedas activar_plugin () debes incluir el archivo plugin.php de wp-admin / includes /. También debe verificar para asegurarse de que su complemento ya no esté activo. El resultado se parece a esto (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);
Utilizo esto en producción en WP 2.9 y no he tenido problemas importantes, pero en mis pruebas tuvo resultados muy inesperados con WPMU, así que tenga cuidado al usar esto en las instalaciones de red.
Wordpress proporciona una función para activar complementos, de acuerdo con 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');
Simplemente puede llamar a la función predeterminada de WordPress.
activate_plugin('akismet/akismet.php');
Por favor, consulte el siguiente enlace para obtener más detalles.