共享内容,但可通过主站点“更新”

时间:2013-02-16 作者:Chris LaFay

在过去的一周里,我做了很多研究,没有找到一个可靠的答案来解决我的问题。所以,我决定来这里问问是否有人知道如何帮助我解决问题。

我将使用WordPress Multisite进行一个项目,该项目将允许用户注册一个网站,并能够将我们将提供给他们的内容重新品牌化为他们自己的内容(即:我将与之合作的公司有大量房地产经纪人信息,他们想免费向其他房地产经纪人提供这些信息,并允许他们用自己的徽标和联系信息为其品牌化)。

因此,很容易创建一个模板站点,其中所有内容都已预加载。当MS创建新站点时,它会获取模板并使用模板创建新站点。

但是,我需要能够在所有网站上修改此内容。我们将有大约50个页面需要在所有这些网站上“共享”,如果我需要进行更改,我需要全面更改。我试过用这个

<?php switch_to_blog(1); ?>
Some code that displays the menu of the Main Blog
<?php restore_current_blog(); ?>
但这会将所有内容链接到主网站(这违背了付费将内容打上自己品牌的目的)。我找到了一些插件,可以让你向所有网站广播帖子,但这是将要预加载的内容。

尽管如此,我还是希望这里有人以前做过这件事,并愿意分享一些这方面的专业知识。谢谢你看这个!


EDIT #1

我通过WordPress支持论坛以及StackExchange进行了研究。

Is there a way to share content amongst wordpress sites :: 这个选项对我来说真的不起作用-我必须能够为用户设置新站点收取费用,并让他们选择将域名添加到他们的站点,这就是为什么我认为我需要多站点的方式。

Re-Blogging - WP MS Support Forum :: 这是我发现的跨所有平台重新发布博客内容的最常用方法。如果我需要向每个人发帖子,那就太好了。然而,这不是我想要完成的。

Exactly what I am looking for :: 但遗憾的是,没有答案。

我在WordPress上搜索了“多站点内容共享”的各种答案,但没有找到与我的主题(或我正在寻找的内容)相关的任何内容(除了#3)


EDIT #2ThreeWP Broadcast. 它碰巧做了很多实际需要的事情,但在我研究的前几天,它隐藏了自己。它允许您在所有子网站中广播页面,并向这些页面发送更新。令人惊叹的因此,出现了一个新的问题。我的客户不希望最终用户编辑他们的内容(版权和法律原因)。因此,我编写了一些代码,可以在后端的编辑页面顶部自动附加一些JS:

function hidePublishingNow() {
global $blog_id, $wpdb;
$prefix = "ssr_";


if(is_super_admin()) {}
else {



    $page = $_GET[\'post\'];
    $pageFound = false;


    if($page > 0 && isset($blog_id)) {
        $sql = "SELECT * FROM ssr__3wp_broadcast_broadcastdata WHERE blog_id = $blog_id";
        $results = $wpdb->get_results($sql, "ARRAY_A");

        foreach($results as $r) {
            if($r[\'post_id\'] == $page) { $pageFound = true; }
            else {}
        }

        if($pageFound == true) {
            wp_enqueue_script(
                \'hide-publishing\',
                get_template_directory_uri() . \'/js/removePublishing.js\',
                array(\'jquery\')
            );
        }
    } else {}
}
}add\\u action(\'admin\\u head\',\'hidePublishingNow\');

基本上,当post.php 在管理面板中加载,它检查当前正在编辑的页面是否是通过广播连接的页面。如果已连接,则加载JS并删除该页面的所有元素,并将其替换为警告。最终用户将永远无法在编辑器中看到内容,也无法更新页面。

这很有效。如果这是我必须放弃的,那太好了——这是我找到的最好的解决方案。我会怎么做love 要做的就是控制主要wp-admin/edit.php?post_type=page 页面(管理面板在此列出所有可编辑的页面)。如果在创建列表时拦截WP操作,并在创建列表时删除特定页面,那将非常好。仍在进行研究,看看这是否可能。我只是想在这里更新我的进度,以防有人有什么建议,或者如果其他人遇到同样的问题,我也会更新我的进度。

<小时>

1 个回复
SO网友:Mark Kaplun

您可以在更新主站点时更新子站点。假设复制内容的帖子ID与主站点中的相同帖子保持相同,则可以编写一个插件,该插件仅在主站点上运行,每次保存都会更新子站点

add_action(\'save_post\',\'wase87206_broadcast\');

function wase87206_broadcast($post_id) {
  $mainurl = get_option(\'siteurl\');
  $post = get_post($ost_id);
  $blogs = get ids of all valid sub sites
  foreach ($blogs as $blogid) {
    switch_to_blog($blogid);
    $siteurl = get_option(\'siteurl\');
    $post->post_content = str_replace($mainurl,$siteurl,$post->post_content); // fix links
    wp_update_post($post);
  }
  switch_to_blog(1); // set context back to main site
}
NOTE: 这只是代码的一个框架,正如下面所评论的,您可能不希望复制修订、自动保存或某些特定内容,这些内容只应显示在主站点上。这里省略的另一件事是删除后的处理。

您将需要相同类型的代码来同步类别、标记和元数据。要保持图像同步,最简单的方法是在子站点的上载目录与主站点的上载目录之间建立一个符号链接。

您需要检查这类代码的性能,这样它就不会运行到php时间限制、内存限制,或者只是烦人地等待保存完成,所以您可能需要对其重新编码,以使用计划的事件,这些事件一次只更新一些博客,然后触发另一个事件来继续更新其他博客。

结束

相关推荐

必需:找不到wp_link_ages。请参阅:WP_LINK_PAGES by Theme Checker

我已经通过WordPress主题检查器运行了我的主题,看看它是否可以提交给WordPress。组织。我遇到了以下错误:必需:找不到wp\\u link\\u页面。请参阅:wp\\U link\\u页面但事实并非如此。我正在使用自定义函数wp_my_own_link_pages() 它是wp_link_pages(). 它为主题生成具有兼容HTML结构的分页。我错过了一些必要的东西吗?我怎样才能做到这一点?