Funkcja oddzwaniania powinna działać, gdy wtyczka jest aktywowana w sieci lub aktywowana dla jednej witryny. Tak czy inaczej, powinno działać.
Jeśli jednak zamierzasz uruchamiać kod zawarty w wywołaniu zwrotnym dla każdego bloga w sieci, pamiętaj, że nie nastąpi to natychmiast po wyjęciu z pudełka, zamiast tego kod w wywołaniu zwrotnym będzie działał w podstawowym kontekście blogu.
Jeśli kod musi być uruchamiany na każdym blogu po aktywacji sieci:
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' );
Jeśli Twój kod musi zostać uruchomiony podczas tworzenia nowego bloga:
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 );
Do tego:
Dla osób czytających, które chcą podobnej funkcjonalności, ale dla wszystkich wtyczek aktywowanych przez sieć (nie tylko tych, które kontrolujesz, jeśli w ogóle mają zastosowanie) , możesz zajrzeć na: https://wordpress.org/plugins/proper-network -aktywacja / która zapewni, że każda wtyczka w sieci wielostanowiskowej, w której sieć jest aktywowana, ma swoją register_activation_hook
i register_deactivation_hook
działa w każdym kontekście blogu.
register_activation_hook
jest tylko opakowaniem, wokóładd_action('activate_' . $file, $function)
którego samo odpala,do_action( 'activate_' . $plugin, $network_wide )
na którym można zobaczyć zmienną$network_wide
i jej stan wartości, jeden z nichtrue
lubfalse
zawsze przekazywany jako argument do wywołania zwrotnego. Dlatego masz dostęp do tego argumentu w swoimregister_activation_hook
iregister_deactivation_hook
opakowaniach. Aby uzyskać więcej informacji, zobaczactivate_plugin
funkcję wewnątrzwp-admin/includes/plugin.php
. Mam nadzieję, że to pomaga.restore_current_blog
musi być wforeach
pętli, ponieważ jeśli umieścisz go na zewnątrz, a następnie iteruj (przełącz) na przykład na 10 blogów, ostatnie wezwanie dorestore_current_blog
przywróci ostatniego bloga, na który się przełączyłeś, a NIE oryginalnego bloga, na którym zacząłeś (prawdopodobnie Twoja strona główna). codex.wordpress.org/WPMU_Functions/restore_current_blog