通过过滤器或钩子从 wp rest api 响应中删除 _links 对象

san*_*ain 5 wordpress-rest-api

我已经unset($data->data['field_name']) 从 json 输出中删除了不需要的数据。为此,我使用 wordpress 过滤器rest_prepare_

但是我们如何从 JSON 输出中删除 _links 对象呢?

小智 5

我不知道如何取消设置,但您可以设置要返回的变量。

\n\n
function prepare_rest($data, $post, $request){\n    return [\n        'id'    => $data->data['id'],\n        'title' => $data->data['title']['rendered']\n    ];\n}\n\nadd_filter('rest_prepare_post', 'prepare_rest', 10, 3);\n
Run Code Online (Sandbox Code Playgroud)\n


Jos*_*ort 5

从 API 中删除内容时必须小心,但如果您确定要删除它,可以这样做:

function so_45027789_rest_prepare_post($data, $post, $request)
{
    foreach($data->get_links() as $_linkKey => $_linkVal) {
        $data->remove_link($_linkKey);
    }
    return $data;
}

add_filter('rest_prepare_post', 'so_45027789_rest_prepare_post', 1, 3);
Run Code Online (Sandbox Code Playgroud)

我建议仅当您在使用 API 的实现中明确要求较小的响应时才这样做,从而保持 API 的默认使用不变,例如通过查询变量:

function so_45027789_rest_prepare_post($data, $post, $request)
{
    $params = $request->get_params();
    if(isset($params['_minimal'])) {
        foreach($data->get_links() as $_linkKey => $_linkVal) {
            $data->remove_link($_linkKey);
        }
    }
    return $data;
}

add_filter('rest_prepare_post', 'so_45027789_rest_prepare_post', 1, 3);
Run Code Online (Sandbox Code Playgroud)