-
作者帖子
-
环境简述:
创建了一个多站点环境,改环境中 站点 id:318 的站管理所有的文章,目前希望在其他站通过 elementor post 的 custom query 直接获取 318 站点中的文章,尝试使用了 switch_to_blog(318) 获取失败请问,请教,请教!!
要在 WordPress 多站点环境中跨站点获取文章,可以尝试以下步骤:
- 在需要获取文章的站点中,使用
switch_to_blog(318)
切换到 318 站点。 - 使用
WP_Query
或get_posts
函数来获取 318 站点中的文章。 - 获取完文章后,使用
restore_current_blog()
恢复到原始站点。
示例代码如下:
// 切换到 318 站点 switch_to_blog(318); // 查询文章 $args = array( 'post_type' => 'post', 'posts_per_page' => 10, // 其他查询参数 ); $query = new WP_Query($args); // 处理查询结果 if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); // 输出文章内容或其他操作 } } // 恢复到原始站点 restore_current_blog();
通过以上步骤,你应该能够在其他站点中成功获取 318 站点中的文章。如果仍然遇到问题,请检查站点权限、代码逻辑等方面是否有问题。
以上由壳壳虫自动解答供参考,您可以继续跟帖或等待人工回复。
用简码调用吧,单纯是这种用 elementor 的情况很难,需要用 API 来实现。
我们官网首页调用的代码如下:
function get_latest_posts_titles_from_subsite($atts) { // 解析短代码参数 $atts = shortcode_atts(array( 'subsite_id' => 1, // 默认子站点 ID 'count' => 5, // 默认获取 5 个文章标题 'post_type' => 'post', // 默认文章类型为 post ), $atts); // 获取短代码参数中的子站点 ID 和文章类型 $subsite_id = intval($atts['subsite_id']); $post_type = $atts['post_type']; // 保存当前主站点 ID $current_blog_id = get_current_blog_id(); // 使用 switch_to_blog 函数切换到特定子站点 switch_to_blog($subsite_id); // 构建 WP_Query 查询 $args = array( 'posts_per_page' => intval($atts['count']), // 获取指定数量的文章标题 'post_type' => $post_type, // 设置文章类型 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'DESC', 'ignore_sticky_posts' => 1, // 排除置顶文章 ); $query = new WP_Query($args); // 检查是否有文章 if ($query->have_posts()) { $titles_list = '<ul>'; // 循环输出文章标题 while ($query->have_posts()) { $query->the_post(); $titles_list .= '<li><a href="' . get_permalink() . '" target="_blank">' . get_the_title() . '</a></li>'; } $titles_list .= '</ul>'; // 切换回之前的主站点 switch_to_blog($current_blog_id); // 重置文章数据 wp_reset_postdata(); // 返回标题列表 return $titles_list; } else { // 切换回之前的主站点 switch_to_blog($current_blog_id); return ' 没有找到最新文章。'; } } // 添加一个 shortcode 以便在文章或页面中调用该函数 add_shortcode('latest_posts_titles', 'get_latest_posts_titles_from_subsite');
使用方式就是加简码
[latest_posts_titles subsite_id="300" count="3"
subsite_id 换成你们的 318 。
感谢 @feibisi 经过寻找测试,最终实现的 custom query 如下
add_action( ‘elementor/query/get_blog_post_xiangmu’, function( $query ) {
// 切换到 318 站点
switch_to_blog(318);
$query->set( ‘post_type’, [ ‘post’ ] );
$query->set( ‘category__in’, array( 12 ) );
// 恢复到原始站点
add_action(‘loop_end’, function() {
restore_current_blog();
});
});add_action(‘loop_end’, function() 最后这个是必须的不然会导致死循环,造成站点 504 。
测试在 elementor 组件中 post 可以用,但是 loop 的 post 模块无效!
你需要完全实现自定义文章类型查询在后续的 WordPress 版本中这种方式容易导致网站负载增大,我上面给的方式可以测试下,完全从数据库里面直接读取,不分编辑器版本不容易出错,也没那么多额外查询
- 在需要获取文章的站点中,使用
-
作者帖子
- 哎呀,回复话题必需登录。