Sua função de retorno de chamada deve ser executada quando o plug-in estiver ativado ou ativado em rede para um único site. De qualquer forma, deve 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, lembre-se de que isso não acontecerá imediatamente, mas o código do retorno de chamada será no contexto principal do blog.
Se seu código precisar ser executado em cada blog na 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 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 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 );
Além disso:
Para aqueles que desejam funcionalidade semelhante, mas para todos os plug-ins que ativam a rede (não apenas aquele que você controla, se aplicável) , convém consultar: https://wordpress.org/plugins/proper-network -activation / que garantirá que cada plug-in na sua rede multissite na qual a rede está ativada tenha o seu register_activation_hook
e seja register_deactivation_hook
executado em cada contexto do blog.
register_activation_hook
é apenas um invólucro em torno doadd_action('activate_' . $file, $function)
qual é acionado,do_action( 'activate_' . $plugin, $network_wide )
do qual você pode ver a variável$network_wide
e seu estado de valor, um de umtrue
oufalse
é sempre passado como argumento para o retorno de chamada. Portanto, você tem acesso a esse argumento no seuregister_activation_hook
eregister_deactivation_hook
wrappers. Para mais informações, consulte aactivate_plugin
funçãowp-admin/includes/plugin.php
. Espero que ajude.restore_current_blog
precisa estar noforeach
loop, porque se você o colocar fora, repita (alterne) para 10 blogs, por exemplo, a última chamada pararestore_current_blog
restaurará o último blog para o qual você mudou e NÃO o blog original no qual você iniciou (presumivelmente seu site principal). codex.wordpress.org/WPMU_Functions/restore_current_blog