Estoy tratando de activar el segundo complemento automáticamente mientras activo el primer complemento.
register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');
}
No funciona dentro de register_activation_hook .. Funciona si lo uso directamente como:
include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');
¿Cómo puedo arreglarlo? Gracias por la ayuda
Solución:
Estoy usando esto para mí ahora:
// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
$dependent = 'hello.php';
if( is_plugin_inactive($dependent) ){
add_action('update_option_active_plugins', function($dependent){
/* for some reason,
activate_plugin($dependent);
is not working */
activate_plugin('hello.php');
});
}
});
// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
$dependent = 'hello.php';
if( is_plugin_active($dependent) ){
add_action('update_option_active_plugins', function($dependent){
deactivate_plugins('hello.php');
});
}
});
plugins
plugin-development
Ünsal Korkmaz
fuente
fuente

Respuestas:
Para obtener una explicación completa de lo que está sucediendo, vea esta publicación (esto es para desactivar los complementos, pero el problema es el mismo).
Una breve explicación: los complementos se activan esencialmente agregándolos a la matriz de pug-ins activos almacenados en la base de datos. Cuando activa el primer complemento, WordPress recupera la matriz de todos los complementos actualmente activos, le agrega el complemento (pero aún no actualiza la base de datos) y luego ejecuta su devolución de llamada de instalación.
Esta devolución de llamada de instalación ejecuta su código.
Después de eso, WordPress actualiza la base de datos con la matriz anterior, que contiene el primer pero no el segundo complemento. Por lo tanto, su segundo complemento parece no estar activado.
Solución: ha mencionado en el enlace anterior que la solución es algo como esto (no probado):
fuente
hello.phpcomplemento de prueba de prueba, funciona bien para mí). Recuerde que si los complementos existen en un subdirectorio, deberá proporcionar la carpeta: por ejemplohello/hello.php.activate_plugin('hello.php');de acuerdo conactivate_plugin($dependent);hello.phpsino la matriz de complementos actualmente activos. No puede pasar sus propias variables a devoluciones de llamada de esa manera. A menos que use variables globales / de clase, deberá usarlasactivate_plugin('hello.php');. Pero eso no debería ser un problema ...?Aquí hay alguien que explica por qué no estaba funcionando para él y cómo tuvo que copiar el método enable_plugin y crear uno propio sin el problema: /programming/1415958/how-to- active-wordpress-plugins-internamente
Aquí está la fuente original del código enable_plugin, que puede usar para crear su propia función y ver dónde no funciona: http://hitchhackerguide.com/2011/02/11/activate_plugin/
Aquí hay una posible solución, que contiene un método alternativo de activación de complementos que probablemente alguien más haya extraído de ese código fuente: ¿Cómo activar complementos mediante código?
fuente
activate_pluginmétodo predeterminado . Puede usartrigger_errorpara encontrar el valor de retorno y publicarlo aquí.