0

我有一个 WordPress 多站点安装,最新版本。

我有一个站点充当所有其他站点的模板。添加新站点时没有问题,因为所有页面都被复制(WPMU Dev Copier 插件)。

但是,对于已经创建的旧站点,我想从“模板”站点替换所有站点的内容页面。这可以包括新创建的站点以及旧站点以使其更简单。

有没有一种使用 PHP 的简单方法可以遍历除模板站点之外的所有站点,并且如果页面的 post_name(slug)在数组中,则将该页面的内容从模板站点复制到每个站点?我真的不想删除页面并重新创建它,但想替换 post_content。

例如,寻找可以返回站点页面的任何隐藏函数,除非存在我忽略的插件。否则我想我正在编码;)

谢谢你。

4

1 回答 1

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;

于 2014-12-16T00:29:40.370 回答