Ваша функция обратного вызова должна работать, когда ваш плагин активирован по сети или активирован для одного сайта. В любом случае, это должно работать.
Однако, если вы намереваетесь запускать код, содержащийся в вашем обратном вызове, для каждого блога в вашей сети, имейте в виду, что это не произойдет сразу после установки, вместо этого код в вашем обратном вызове будет в основном контексте блога.
Если ваш код должен запускаться в каждом блоге после активации по сети:
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' );
Если ваш код должен запускаться при создании нового блога:
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 );
Дополнительно:
Для тех, кто читает аналогичные функциональные возможности, но для всех плагинов, активирующих сеть (не только для того, который вы контролируете, если применимо) , вы можете посмотреть: https://wordpress.org/plugins/proper-network -активация /, которая гарантирует, что каждый плагин в вашей многосайтовой сети, в которой активирована сеть, имеет и свой, register_activation_hook
и register_deactivation_hook
работает в каждом контексте блога.
register_activation_hook
- это просто оболочка, вокругadd_action('activate_' . $file, $function)
которой запускается сама по себе,do_action( 'activate_' . $plugin, $network_wide )
из которой вы можете видеть переменную$network_wide
и состояние ее значения, одно из нихtrue
илиfalse
всегда передаваемое в качестве аргумента для обратного вызова. Следовательно, у вас есть доступ к этому аргументу в вашихregister_activation_hook
иregister_deactivation_hook
оболочках. Для получения дополнительной информации см.activate_plugin
Функцию внутриwp-admin/includes/plugin.php
. Надеюсь, это поможет.restore_current_blog
должен быть вforeach
цикле, потому что если вы поместите его снаружи, то итерируйте (переключитесь), например, на 10 блогов, при последнем вызовеrestore_current_blog
будет восстановлен последний блог, на который вы переключились, а НЕ исходный блог, с которого вы начали (предположительно) ваш главный сайт). codex.wordpress.org/WPMU_Functions/restore_current_blog