问题描述

是否可以集中管理多站点安装的内容?如果我有 20 个网站的网络,是否可以在一个网站上更改内容,并在网络上进行更新,或者我必须一次更改每个网站?更具体的情况是,如果我有一个必须出现在每个站点上的 「条款和条件」 页面,这需要定期更改,我可以进行更改并将其复制。

任何有效管理此过程的建议/方向/资源将不胜感激。

最佳解决方法

我已成功使用 ThreeWP Broadcast 插件在 WPMU 安装上执行此操作。

基本概念是您有一个’broadcasting’ 站点,您可以从其中将内容广播到其他站点。内容可以是帖子,页面,自定义帖子类型,自定义分类法,后期元数据或附件。

如果内容在’broadcasting’ 网站上更新,则更新将反映在其他网站上。更多信息可以在上面链接的 ThreeWP Broadcast WP Plugin Directory 条目中找到。

次佳解决方法

我有一个类似的问题,我需要内容可用”network-wide” 并从一个位置 (主要网站) 管理,所以我创建了一个自定义的帖子类型在主要的网站称为”shared content” 和一个漂亮的小短码,从主要网站的内容。

这里是”a version”,但它并没有测试,因为我没有访问我当时使用的工作解决方案,但它应该工作正常:

<?php
/*
Plugin Name: WPMU Shared Content
Plugin URI: http://en.bainternet.info
Description: This plugin lets you create and manage content on the main MU installation and shared it accros you network
Version: 0.1
Author: Bainternet
License:

  Copyright 2012 Bainternet (admin@bainternet.info)

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License, version 2, as
  published by the Free Software Foundation.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
/* Disallow direct access to the plugin file */
if (basename($_SERVER['PHP_SELF']) == basename (__FILE__)) {
        die('Sorry, but you cannot access this page directly.');
}

if (!class_exists('wpmu_shared_content')){

        /**
        * wpmu_shared_content
        */
        class wpmu_shared_content
        {

                static $main_site_id;
                static $current;


                //class constructor
                public function __construct($main_id = 1);
                {
                        global $blog_id;
                        $this->main_site_id = $main_id
                        $this->current =  $blog_id;
                        //only register the post type to the main side
                        if (is_main_site($this->main_site_id) && is_super_admin())
                                add_action( 'init', array($this,'register_shared_content' ));

                        add_shortcode('sh',array($this,'load_shared_content'));
                        add_shortcode('SH',array($this,'load_shared_content'));
                }

                //register custom post type shared content
                public function register_shared_content() {
                        $labels = array(
                                'name' => _x( 'Shared Content', 'shared_content' ),
                                'singular_name' => _x( 'shared_content', 'shared_content' ),
                                'add_new' => _x( 'Add New', 'shared_content' ),
                                'add_new_item' => _x( 'Add New shared_content', 'shared_content' ),
                                'edit_item' => _x( 'Edit shared_content', 'shared_content' ),
                                'new_item' => _x( 'New shared_content', 'shared_content' ),
                                'view_item' => _x( 'View shared_content', 'shared_content' ),
                                'search_items' => _x( 'Search Shared Content', 'shared_content' ),
                                'not_found' => _x( 'No shared content found', 'shared_content' ),
                                'not_found_in_trash' => _x( 'No shared content found in Trash', 'shared_content' ),
                                'parent_item_colon' => _x( 'Parent shared_content:', 'shared_content' ),
                                'menu_name' => _x( 'Shared Content', 'shared_content' ),
                        );

                        $args = array(
                                'labels' => $labels,
                                'hierarchical' => false,
                                'description' => 'Content to be shared with all sites but managed form main installation only.',
                                'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ),

                                'public' => true,
                                'show_ui' => true,
                                'show_in_menu' => true,

                                'menu_icon' => 'http://i.imgur.com/LI2B6.png',
                                'show_in_nav_menus' => true,
                                'publicly_queryable' => false,
                                'exclude_from_search' => false,
                                'has_archive' => false,
                                'query_var' => false,
                                'can_export' => true,
                                'rewrite' => false,
                                'capability_type' => 'post'
                        );
                        register_post_type( 'shared_content', $args );
                }

                //shortcode handler
                public function load_shared_content($atts,$content=null){
                        extract(shortcode_atts(
                                array('id' => 0),
                        $atts));
                        $retVal = "";
                        if ($id <= 0)
                                return $retval;

                        $shared_content = get_blog_post($this->main_site_id,$id);
                        $retVal = apply_filters('the_content',$shared_contents['post_content']);
                        return $retVal;
                }

        }//end class
}//end if

if (is_multisite())
        new wpmu_shared_content(apply_filters('wpmu_shared_content_main_site_id', 1));

/**
 * Usage:  [sh id="3"] or [SH id= 3]
 */

第三种解决方法

bainternet 和 davemac 的答案是伟大的,如果不是有点沉重的手。我有一个类似的情况,我有 5 个博客运行,一个”master” 博客,保持所有的全球使用条款和隐私政策的事情。我是怎么做到的呢

  1. 在您的主要博客中,创建您的网页,然后设置一个名为”global” 的导航菜单,其中包含您想要全局共享的所有页面。

  2. 将以下代码添加到您的主题,无论您想要显示全局导航:

    if (is_multisite()) switch_to_blog(1); //if the global blog is #1
    wp_nav_menu( array( 'theme_location' => 'global' ) );
    restore_current_blog();
    
  3. 您可以将上述代码添加到窗口小工具,如果您在窗口小工具中需要它。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。