Apparently a global variable is not properly updated. I found a fix based on blackriver’s reply here, it’s a little ugly but it works:
add_action('switch_blog', 'fix_wpmu_create_blog', 10, 2);
function fix_wpmu_create_blog($new_blog_id, $old_blog_id){
global $wpdb, $wp_queries;
if($wp_queries && defined('FIX_WPMU_CREATE_BLOG')){
$old_pattern = $wpdb->base_prefix.$old_blog_id.'_';
$new_pattern = $wpdb->base_prefix.$new_blog_id.'_';
$wp_queries = str_replace($old_pattern, $new_pattern, $wp_queries);
//echo '<pre>';
//print_r($wp_queries);
//echo '</pre>';
}
}
and
define('FIX_WPMU_CREATE_BLOG', true);
somewhere in the code that’s using this function.
If someone has a better solution please post it so I can accept an answer 🙂