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

在WordPress的register_rest_route回调中echo响应数据是否可行?

WordPress REST API 回调实现规范与格式化JSON解决方案

你的echo输出响应的方式不符合WordPress REST API规范,不建议使用,会破坏API的响应结构、头部处理逻辑,甚至可能引发内容冲突。下面详细说明问题原因和正确实现方式:

核心误解澄清

你提到的"回调应返回布尔值"是对文档的误读:

  • permission_callback(权限回调)需要返回布尔值,用于验证请求权限
  • 路由的业务callback(如你的get_info)可以返回以下类型:
    • WP_REST_Response对象(推荐)
    • 数组/原生数据(会被自动包装为WP_REST_Response)
    • WP_Error对象(自动转换为标准错误响应)

原实现问题分析

你用return json_encode(...)得到带转义的JSON,是因为WordPress会自动对回调返回的字符串进行二次JSON序列化,导致最终响应是"字符串包裹的JSON"。而直接echo会绕过WP的响应处理机制,丢失正确的Content-Type头部、错误状态码处理等核心功能。

正确实现:返回格式化JSON的规范写法

修正后的路由注册(移除多余闭合括号)

register_rest_route( 
    'example/v1', 
    '/test/(?P<id>[\d]+)', 
    array(
        'methods'  => WP_REST_Server::READABLE,
        'callback' => 'get_info',
        'permission_callback' => '__return_true'             
    )
);

规范的回调函数

function get_info( $request ) {
    // 示例:假设$response是远程API请求结果
    $response = wp_remote_get('https://example.com/api/data');
    
    // 处理请求错误
    if ( is_wp_error( $response ) ) {
        return new WP_Error( 
            'remote_api_failure', 
            $response->get_error_message(), 
            array( 'status' => 500 ) 
        );
    }       
    
    // 解析远程响应体
    $body_content = wp_remote_retrieve_body( $response );
    $body_data = json_decode( $body_content, true );
    
    // 处理JSON解析错误
    if ( json_last_error() !== JSON_ERROR_NONE ) {
        return new WP_Error( 
            'invalid_json', 
            'Failed to parse remote API response', 
            array( 'status' => 500 ) 
        );
    }
    
    // 创建REST响应对象并启用格式化
    $rest_response = rest_ensure_response( $body_data );
    // 设置正确响应头
    $rest_response->set_headers( array(
        'Content-Type' => 'application/json; charset=utf-8',
    ) );
    // 强制启用JSON格式化
    $rest_response->set_json_options( JSON_PRETTY_PRINT );
    
    return $rest_response;
}

额外说明

  • 调试模式下(WP_DEBUG = true),WordPress默认会输出格式化的JSON;生产环境可通过set_json_options强制开启。
  • 始终通过WP的响应机制返回数据,确保API符合REST规范,兼容各类客户端工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:45:05