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

WordPress多站点无法通过REST API获取并预加载文章数据

WordPress多站点子站Lightbox REST API 404问题修复方案

一、排查前端API请求地址正确性

  • 检查子站前端发起的REST请求URL,是否误将主站路径拼入。比如子站路径是https://www.bahai.in/hi,但前端请求的是https://www.bahai.in/wp-json/wp/v2/posts/899(缺少/hi前缀),这会直接请求主站API,而主站不存在ID为899的文章,自然返回rest_post_invalid_id错误。
  • 修复方式:主题JS代码中不要硬写API路径,改用WordPress内置全局变量wpApiSettings.root,它会自动适配当前站点的REST根路径。示例:
// 替换硬编码路径
const apiUrl = wpApiSettings.root + 'wp/v2/posts/' + postId;

二、修正switch_to_blog()的使用逻辑

  • 之前调用switch_to_blog(3)无效,大概率是调用时机错误或未恢复站点上下文。
  • 正确用法:若在PHP代码中处理跨站点REST逻辑,需在处理子站业务前调用switch_to_blog(3),处理完成后必须调用restore_current_blog(),避免站点上下文混乱。示例代码:
function custom_fetch_subsite_post( $request ) {
    $post_id = $request->get_param('id');
    // 切换到目标子站(ID为3)
    switch_to_blog(3);
    $post = get_post($post_id);
    // 恢复当前站点上下文
    restore_current_blog();
    
    if ( !$post ) {
        return new WP_Error('rest_post_invalid_id', '无效的文章ID', array('status' => 404));
    }
    return rest_ensure_response($post);
}
  • 注意:如果是前端直接请求子站API,无需在主站代码中使用switch_to_blog(),因为子站API本身可正常返回数据,问题核心在前端请求路径错误。

三、检查子站固定链接配置

  • 确认子站固定链接为非朴素结构(如/%postname%/),REST API依赖自定义固定链接规则,若使用默认朴素格式,可能导致路由解析失败。
  • 操作路径:登录子站后台 →「设置」→「固定链接」,选择自定义结构后保存(会自动刷新.htaccess规则)。

四、排查JS路径拼接逻辑

  • 若前端使用相对路径(如/wp-json/wp/v2/posts/899),在子站页面中会自动拼接为主站域名路径,导致请求错误。必须使用wpApiSettings.root获取当前站点的正确REST根路径,避免硬编码适配问题。

相关知识点

  • 多站点REST API端点规则:子目录站点的REST端点为主域名/子目录/wp-json/,子域名站点为子域名/wp-json/,每个站点拥有独立的API路由。
  • switch_to_blog()作用:用于在多站点环境中临时切换站点上下文,但必须搭配restore_current_blog()使用,否则会破坏后续站点操作的上下文环境。
  • wpApiSettings全局对象:WordPress自动注入的前端全局变量,包含当前站点的REST根路径、非ce验证字段等信息,是前端适配多站点API的标准方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:29:59