¿Cómo ejecutar una función de activación cuando el complemento se activa en red en varios sitios?

10

Estoy tratando de hacer que mi complemento multisitio sea compatible. Estoy usando la función register_activation_hook() para registrar mi función my_activate() para ejecutar cuando el complemento está activado. Esto funciona bien en una instalación de un solo sitio.

function my_activate() {
    // Do some things.
}
register_activation_hook( __FILE__, 'my_activate' );

El problema es que my_activate() no se ejecuta para cada sitio cuando mi complemento está 'activado por la red'. Además, no se ejecuta cuando se crean nuevos sitios en la red.

¿Cómo puedo hacer que mi rutina de activación se ejecute a) cuando mi complemento está activado en la red para todos los sitios de la red y b) cuando se crea un sitio nuevo? en la red multisitio?

    
pregunta henrywright 14.03.2015 - 01:21

1 respuesta

17

Su función de devolución de llamada debería ejecutarse cuando su complemento esté activado o activado en la red para un solo sitio. De cualquier manera, debería estar funcionando.

Sin embargo, si pretende que se ejecute el código contenido en su devolución de llamada para cada blog de su red, tenga en cuenta que esto no sucederá de inmediato, en su lugar, el código de su devolución de llamada aparecerá en el blog principal contexto.

Si su código debe ejecutarse en cada blog tras la activación de la red:

function my_plugin_activate($network_wide) {

    if ( is_multisite() && $network_wide ) { 

        global $wpdb;

        foreach ($wpdb->get_col("SELECT blog_id FROM $wpdb->blogs") as $blog_id) {
            switch_to_blog($blog_id);
            //do your specific thing here...
            restore_current_blog();
        } 

    } else {
        //run in single site context
    }

}

register_activation_hook( __FILE__, 'my_plugin_activate' );

Si su código debe ejecutarse cuando se crea un nuevo blog:

function my_plugin_new_blog($blog_id, $user_id, $domain, $path, $site_id, $meta) {

    //replace with your base plugin path E.g. dirname/filename.php
    if ( is_plugin_active_for_network( 'my-plugin-name-dir/my-plugin-name.php' ) ) {
        switch_to_blog($blog_id);
        //do your specific thing here...
        restore_current_blog();
    } 

}

add_action('wpmu_new_blog', 'my_plugin_new_blog', 10, 6 );

Además:

Para aquellos que leen una funcionalidad similar pero para todos los complementos que activan la red (no solo el que usted controla, si corresponde) , es posible que desee ver: enlace que asegurará que cada complemento en su red multisitio en la cual está activada por la red, tenga tanto su register_activation_hook como register_deactivation_hook ejecutado en el contexto de cada blog.

    
respondido por el userabuser 14.03.2015 - 04:32

Lea otras preguntas en las etiquetas