Votre fonction de rappel devrait fonctionner lorsque votre plugin est activé par le réseau ou activé pour un seul site. Quoi qu'il en soit, cela devrait fonctionner.
Cependant, si vous avez l'intention d'exécuter le code contenu dans votre rappel pour chaque blog de votre réseau, sachez que cela ne se produira pas immédiatement, le code dans votre rappel sera dans le contexte du blog principal.
Si votre code doit être exécuté sur chaque blog lors de l'activation du réseau:
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 votre code doit être exécuté lors de la création d'un nouveau 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 );
Aditionellement:
Pour ceux qui lisent qui veulent des fonctionnalités similaires mais pour tous les plugins qui sont activés sur le réseau (pas seulement celui que vous contrôlez, le cas échéant) , vous pouvez consulter: https://wordpress.org/plugins/proper-network -activation / qui garantira que chaque plugin de votre réseau multisite dans lequel est activé le réseau, a son register_activation_hook
et register_deactivation_hook
s'exécute dans chaque contexte de blog.
register_activation_hook
est juste un wrapper autouradd_action('activate_' . $file, $function)
duquel se déclenche lui-même,do_action( 'activate_' . $plugin, $network_wide )
dont vous pouvez voir la variable$network_wide
et son état de valeur, l'untrue
ou l' autre oufalse
est toujours passé comme argument au rappel. Par conséquent, vous avez accès à cet argument dans vos wrappersregister_activation_hook
etregister_deactivation_hook
. Pour plus d'informations, voir laactivate_plugin
fonction danswp-admin/includes/plugin.php
. J'espère que cela pourra aider.restore_current_blog
doit être dans laforeach
boucle, car si vous le mettez à l'extérieur, puis itérez (basculez) sur 10 blogs par exemple, le dernier appel àrestore_current_blog
restaurera le dernier blog vers lequel vous êtes passé et PAS le blog d'origine où vous avez commencé (vraisemblablement votre site principal). codex.wordpress.org/WPMU_Functions/restore_current_blog