当插件被网络激活或为单个站点激活时,回调函数应运行。无论哪种方式,它都应该起作用。
但是,如果您打算为网络中的每个博客运行包含在回调中的代码,那么请注意,这并非开箱即用,而是您的回调中的代码将在主博客上下文中运行。
如果您的代码需要在网络激活时在每个博客上运行:
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 -activation /将确保您在多站点网络中被网络激活的每个插件在每个博客上下文中都有register_activation_hook
并register_deactivation_hook
运行。