我有一个WordPress多站点安装,最新版本。
我有一个网站充当所有其他网站的模板。添加新站点时没有问题,因为所有页面都被复制(WPMU Dev Copier插件)。
但是,对于已经创建的旧网站,我想从"模板"替换所有网站的内容页面。现场。这可以包括新创建的站点以及旧站点,以使其更简单。
使用PHP的简单方法是我可以遍历模板站点以外的所有站点,如果页面的post_name(slug)在数组中,则将该页面的内容从模板站点复制到每个站点现场?我真的不想删除页面并重新创建它,但想要替换post_content。
查找可以返回网站页面的任何隐藏功能,例如,除非存在我忽略的插件。否则我想我是编码;)
谢谢。
答案 0 :(得分:0)
所以这些是原始版本(尚未优化),从当前博客(网站)复制到除#1之外的所有其他博客(网站)。如果存在post_name,则复制内容,否则假定为新页面,并创建一个。为当前登录的用户提供新的页面所有权。
需要更改以处理大型安装,就像目前一次性使用一些分页等一样。
适合我的要求,可能会在其他情况下玩。 如果用于他人,则共享。
$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;