WordPress多站点跨站展示数据:最简实现方式及可用插件咨询
WordPress多站点跨站展示数据的最简实现方案及可用插件
一、最简代码实现(无需插件)
WordPress多站点原生提供了switch_to_blog()函数,这是最直接的跨站取数方式,不需要额外插件。核心逻辑是切换到目标站点上下文获取数据,完成后切回原站点,避免影响当前站点的运行。
示例1:直接在模板中调用
把这段代码放到主题的模板文件(比如page.php或自定义模板)里,替换目标站点ID即可:
// 替换成你要获取数据的站点ID $target_blog_id = 2; // 切换到目标站点 switch_to_blog($target_blog_id); // 获取目标站点的最新5篇发布状态的文章 $target_posts = get_posts([ 'numberposts' => 5, 'post_status' => 'publish' ]); // 输出文章列表 echo '<div class="cross-site-posts">'; echo '<h3>来自站点ID'.$target_blog_id.'的最新文章</h3>'; echo '<ul>'; foreach ($target_posts as $post) { setup_postdata($post); echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; } echo '</ul>'; echo '</div>'; // 切回当前站点,必须执行这一步 restore_current_blog(); // 重置文章数据 wp_reset_postdata();
示例2:封装成短代码(编辑器直接调用)
如果不想改模板,可把逻辑封装成短代码,这样在文章/页面编辑器里就能调用:
add_shortcode('cross_site_content', function($atts) { // 配置默认参数 $params = shortcode_atts([ 'blog_id' => 2, 'post_count' => 5, 'title' => '其他站点最新内容' ], $atts); ob_start(); switch_to_blog($params['blog_id']); $posts = get_posts([ 'numberposts' => $params['post_count'], 'post_status' => 'publish' ]); echo '<div class="cross-site-section">'; echo '<h4>'.$params['title'].'</h4>'; if (!empty($posts)) { echo '<ul>'; foreach ($posts as $post) { setup_postdata($post); echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; } echo '</ul>'; } else { echo '<p>暂无内容</p>'; } echo '</div>'; restore_current_blog(); wp_reset_postdata(); return ob_get_clean(); });
之后在编辑器里输入[cross_site_content blog_id="3" post_count="4" title="站点3的热门文章"]就能展示对应内容。
二、可用现有插件
如果不想写代码,这些插件可以快速实现需求:
- Network Posts Extended:专门为多站点打造,支持通过短代码或侧边栏小工具展示任意站点的文章、分类、标签内容,可自定义展示样式、排序规则,功能全面。
- Multisite Content Copier/Updater:原本主打内容复制同步,但也附带了跨站点内容展示的短代码功能,支持筛选内容类型、数量,操作简单。
- Multisite Post Duplicator:除了复制文章,也提供短代码调用其他站点内容的功能,适合快速展示文章、页面这类内容。
内容的提问来源于stack exchange,提问作者Opeyemi Timothy
相关产品推荐
相关产品推荐

