合适的钩子是wpmu_new_blog
. 我将描述我们在Multilingual Press Pro. 我们的代码实际上相当复杂;我将摘录最重要的几点。
我们提供了一个选项,可以选择任何现有博客作为新博客的模板。很好的一点是,你可以编辑模板内容,自定义主题,激活插件……就像在任何其他博客中一样。以后更改默认内容时,无需更新代码。
对于您的用例,您只需创建一个模板博客并获取博客ID即可。
add_action( \'wpmu_new_blog\', function( $blog_id ) {
// copy the template blog here
});
回调中发生了什么?
我们得到模板博客的前缀(ID 44):
switch_to_blog( 44 );
$template_prefix = $wpdb->prefix;
restore_current_blog();
我们删除新博客的新表,并从模板博客中复制内容。
foreach ( $tables as $table )
{
// empty the tables
$wpdb->query( \'TRUNCATE TABLE \' . $wpdb->prefix . $table );
// insert template content
$wpdb->query( "INSERT INTO $wpdb->prefix$table SELECT * FROM $template_prefix$table" );
}
我们为新博客恢复了最重要的选项(
blogname
,
home
,
admin_email
等)并重命名
user_roles
以匹配当前博客。
然后我们复制附件。这些……并不简单。wp_upload_dir()
之后不可靠switch_to_blog()
. 您必须添加一些变通方法才能获得正确的路径。这实际上是一个单独的类,有250行。:)
还有其他问题,如域映射插件、自定义插件表以及与使用相同挂钩或主题的其他插件以及需要安装调用的插件的一些小兼容性问题。当你只需要一个站点的解决方案时,他们不应该打扰你。