You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress多站点子域名站点展示主站点自定义文章?

在WordPress多站点子域名展示主站点自定义文章的方案

嘿,这个需求我在项目里碰到过好几次,给你几个实用的解决方案,从代码实现到插件都有,你可以根据自己的情况选:

方法一:用WordPress内置函数(最推荐,原生无依赖)

WordPress多站点自带了站点切换的核心函数switch_to_blog(),可以临时切换到主站点去查询自定义文章,用完再切回子站点就行,完全不需要额外插件。

具体步骤:

  1. 打开子站点的主题文件(比如想在某个页面展示就改page.php,想做自定义页面模板就新建template-custom-posts.php),插入以下代码:
// 先切换到主站点,主站点ID一般是1,不确定的话去网络后台站点列表里看,编辑主站点时地址栏?id=后面的数字就是ID
switch_to_blog(1);

// 配置查询参数,把your_custom_post_type改成你实际的自定义文章类型slug
$main_site_posts = new WP_Query(array(
    'post_type' => 'your_custom_post_type',
    'posts_per_page' => 10, // 控制显示的文章数量
    'post_status' => 'publish' // 只显示已发布的文章
));

// 循环输出文章内容
if ($main_site_posts->have_posts()) {
    echo '<div class="main-site-custom-posts">';
    while ($main_site_posts->have_posts()) {
        $main_site_posts->the_post();
        // 这里可以自定义输出的HTML结构,比如标题、摘要、缩略图都可以加
        echo '<article>';
        echo '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>';
        echo '<p>' . get_the_excerpt() . '</p>';
        echo '</article>';
    }
    echo '</div>';
    // 重置查询,避免影响子站点本身的内容
    wp_reset_postdata();
} else {
    echo '<p>主站点暂无自定义文章</p>';
}

// 切回当前子站点,这一步很重要,别忘了!
restore_current_blog();
  1. 保存文件后,访问子站点对应的页面就能看到主站点的自定义文章了。

方法二:自定义REST API(适合前端异步加载)

如果你的子站点用了前端框架(比如Vue、React),或者想实现无刷新加载内容,可以在主站点注册一个REST API接口,然后子站点通过AJAX请求获取数据。

  1. 先在主站点的functions.php里添加接口代码:
// 注册自定义REST API路由
add_action('rest_api_init', function() {
    register_rest_route('main-site/v1', '/custom-posts', array(
        'methods' => WP_REST_Server::READABLE, // 允许GET请求
        'callback' => 'fetch_main_site_custom_posts',
        'permission_callback' => '__return_true' // 公开访问,需要权限的话可以改成自定义判断
    ));
});

// 接口回调函数,返回自定义文章数据
function fetch_main_site_custom_posts($request) {
    $per_page = $request->get_param('per_page') ?: 10;
    $posts = get_posts(array(
        'post_type' => 'your_custom_post_type',
        'posts_per_page' => $per_page,
        'post_status' => 'publish'
    ));

    // 整理返回的数据格式
    $response = array();
    foreach ($posts as $post) {
        $response[] = array(
            'id' => $post->ID,
            'title' => get_the_title($post->ID),
            'permalink' => get_permalink($post->ID),
            'excerpt' => get_the_excerpt($post->ID),
            'thumbnail' => get_the_post_thumbnail_url($post->ID)
        );
    }

    return rest_ensure_response($response);
}
  1. 然后在子站点的前端JS里请求这个接口:
// 假设页面上有个ID为custom-posts-container的容器用来放文章
const container = document.getElementById('custom-posts-container');

fetch('https://domainname.com/wp-json/main-site/v1/custom-posts')
.then(res => res.json())
.then(posts => {
    let html = '';
    posts.forEach(post => {
        html += `
            <div class="post-item">
                <h3><a href="${post.permalink}">${post.title}</a></h3>
                ${post.thumbnail ? `<img src="${post.thumbnail}" alt="${post.title}">` : ''}
                <p>${post.excerpt}</p>
            </div>
        `;
    });
    container.innerHTML = html;
})
.catch(err => console.log('加载主站点文章失败:', err));

方法三:用多站点插件(适合不想写代码的同学)

如果不想折腾代码,可以试试专门的多站点内容共享插件:

  • Multisite Global Search:可以跨站点搜索并展示内容,支持自定义文章类型,设置好后就能在子站点搜索并显示主站点的自定义文章。
  • Multisite Post Duplicator:可以把主站点的自定义文章复制到子站点,但不是实时同步,适合不需要实时更新的场景。
  • 注意选插件的时候尽量挑维护活跃、用户量高的,避免兼容性问题。

几个重要的注意点

  • 确认主站点的自定义文章类型注册时设置了'public' => true,不然子站点没法访问到。如果用API的话,还要加'show_in_rest' => true。
  • 如果自定义文章需要登录才能查看,记得调整代码里的权限逻辑,比如把REST API的permission_callback改成判断用户是否有权限的函数。
  • 文章数量多的话,记得加分页或者用缓存(比如WP Rocket、W3 Total Cache),避免拖慢子站点的加载速度。

内容的提问来源于stack exchange,提问作者Muktar Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:13:36