Como executar uma function de ativação quando o plugin é ativado por rede no multisite?

Estou tentando tornar meu plugin multisite compatível. Estou usando a function register_activation_hook() para registrar minha function my_activate() para executar quando o plugin está ativado. Isso funciona bem em uma instalação de site único.

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

O problema é que my_activate() não é executado para cada site quando meu plugin é ‘rede ativada’. Além disso, ele não é executado quando novos sites são criados na rede.

Como posso obter minha rotina de ativação para a) executar quando o meu plugin é rede ativada para todos os sites da rede e b) executar quando um novo site é criado na rede multisite?

Solutions Collecting From Web of "Como executar uma function de ativação quando o plugin é ativado por rede no multisite?"

Sua function de retorno de chamada deve ser executada quando seu plugin é ativado ou ativado pela rede para um único site. De qualquer forma, ele deveria estar funcionando.

No entanto, se você pretende que o código contido em seu retorno de chamada seja executado para cada blog em sua rede, então esteja ciente de que isso não acontecerá fora da checkbox, em vez disso, o código dentro do retorno de chamada será no contexto do blog principal.

Se o seu código precisar ser executado em cada blog após a Ativação de Rede:

 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' ); 

Se o seu código precisar ser executado quando um novo blog for criado:

 function my_plugin_new_blog($blog_id, $user_id, $domain, $path, $site_id, $meta) { //replace with your base plugin path Eg 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 ); 

Além disso:

Para quem lê quem quer funcionalidade similar, mas para todos os plugins que ativam a rede (não apenas aquele que você controla, se for o caso) , então você pode querer olhar para: https://wordpress.org/plugins/proper-network -activação / que assegurará que cada plugin em sua rede multisite em que seja ativado pela rede, tenha seu register_activation_hook e register_deactivation_hook executado em cada contexto do blog.