So these is the raw version (not yet optimised), that copies from current blog (site) to all other blogs (sites) except #1. Where post_name exists, content is copied, otherwise assumed a new page, and one is created. New page ownership given to currently logged in user.
Needs to be changed to handle large installations, as does all in one go at the moment, with some paging, etc.
Suitable for my requirements, could probably be played around with for other situations.
So shared in case of use to others.
$id = get_current_blog_id();
$sql = "SELECT * FROM ".$wpdb->base_prefix."blogs WHERE blog_id != %d AND blog_id > 1";
$blogs = $wpdb->get_results($wpdb->prepare($sql, $id));
foreach ($blogs as $blog):
echo $blog->path.' ('.$blog->blog_id.')<br />';
$blog_id = ($id == 1) ? '' : $id.'_';
$sql = "SELECT * FROM ".$wpdb->base_prefix.$blog_id."posts WHERE post_type='page' and post_status='publish'";
$pages = $wpdb->get_results($sql);
foreach ($pages as $page):
$sql = "SELECT ID FROM ".$wpdb->base_prefix.$blog->blog_id."_posts WHERE post_name = %s AND post_status = 'publish'";
$target = $wpdb->get_row($wpdb->prepare($sql, $page->post_name));
if ($target):
$sql = "UPDATE ".$wpdb->base_prefix.$blog->blog_id."_posts SET post_content = %s WHERE post_type='page' AND post_status = 'publish' AND post_name = %s";
$wpdb->query($wpdb->prepare($sql, $page->post_content, $page->post_name));
else:
$post_author = $current_user->ID;
$post_content = $page->post_content;
$post_title = $page->post_title;
$comment_status = 'closed';
$post_name = $page->post_name;
$post_type = 'page';
$insert = $wpdb->prepare( "( %d, %s, %s, %s, %s, %s)", $post_author, $post_content, $post_title, $comment_status, $post_name, $post_type );
$wpdb->query( "INSERT INTO ".$wpdb->base_prefix.$blog->blog_id."_posts ( post_author, post_content, post_title, comment_status, post_name, post_type ) VALUES " . $insert );
endif;
endforeach;
endforeach;