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

WordPress自定义REST API如何返回无引号的响应?

问题

现有自定义WP REST API端点代码如下:

add_action('rest_api_init', function () {
    $namespace = 'wp/v2';

    $routes = ['products', 'product-categories'];
    foreach($routes as $route) {
        register_rest_route($namespace, $route, [
            'methods'   => WP_REST_Server::READABLE,
            'callback'  => 'custom_rest'
        ]);
    }
});

function custom_rest() {
    return new WP_REST_Response('[{}]', 200);
}

当前客户端收到的响应是带引号的'[{}]'或"[{}]",但我希望像默认的/posts接口那样,直接返回不带引号的[{}]。请问该如何修改custom_rest()函数?

解决方案

你现在的问题根源在于:把已经编码好的JSON字符串直接传给WP_REST_Response后,WordPress会把这个字符串当作普通文本再次执行JSON编码,所以才会多出一层引号。这里有两种靠谱的解决方式:

方式一:返回PHP数组/对象(推荐)

这是WordPress REST API的标准用法,默认接口(比如/posts)都是这么做的——WP会自动把PHP的数组或对象序列化为正确的JSON格式,不需要手动编码。修改后的函数如下:

function custom_rest() {
    // 用PHP数组包裹空对象,对应JSON的 [{}]
    return new WP_REST_Response([(object)[]], 200);
}

这样客户端收到的就是不带多余引号的[{}],和默认接口的返回格式完全一致。

方式二:手动输出原始JSON字符串

如果你的场景中已经有预先生成好的JSON字符串,不想再转成PHP结构,可以通过设置响应头和内容类型,避免WP再次编码:

function custom_rest() {
    $response = new WP_REST_Response();
    // 指定响应内容类型为JSON
    $response->set_content_type('application/json');
    // 设置原始JSON内容,WP不会再对其编码
    $response->set_data('[{}]');
    return $response;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:35:37