我已从json输出中删除unset($data->data['field_name'])
的不需要的数据。为此我使用wordpress过滤器rest_prepare_
。
但是我们如何从JSON输出中删除_links对象?
答案 0 :(得分:2)
我不知道如何 取消设置 ,但您可以设置要返回的变量。
function prepare_rest($data, $post, $request){
return [
'id' => $data->data['id'],
'title' => $data->data['title']['rendered']
];
}
add_filter('rest_prepare_post', 'prepare_rest', 10, 3);
答案 1 :(得分:2)
这不是一个很好的解决方案,但有效。
function contract_remove_links( $data, $post, $context ) {
$data->remove_link( 'collection' );
$data->remove_link( 'self' );
$data->remove_link( 'about' );
$data->remove_link( 'author' );
$data->remove_link( 'replies' );
$data->remove_link( 'version-history' );
$data->remove_link( 'https://api.w.org/featuredmedia' );
$data->remove_link( 'https://api.w.org/attachment' );
$data->remove_link( 'https://api.w.org/term' );
$data->remove_link( 'curies' );
return $data;
}
add_filter( 'rest_prepare_post', 'contract_remove_links', 10, 3 );
答案 2 :(得分:1)
要小心地从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);
仅当您在使用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);
答案 3 :(得分:0)
Unfortunately, you cannot remove it, it’s protected.
unset( $data->links );
PHP Fatal error: Uncaught Error: Cannot access protected property WP_REST_Response::$links
/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php(311)
Line 1567: $response->add_links( $this->prepare_links( $post ) );
Line 1608: protected function prepare_links( $post ) {
答案 4 :(得分:0)
rest_prepare_post
是要使用的正确过滤器,但_links
字段是由WordPress动态生成的。所以你不能直接删除它。
您可以在此参数中添加自己的link
,也可以从" _links"中删除默认链接。
这是代码......
add_filter( 'rest_prepare_post', function ( $response ) {
$response->add_link( 'yourrel', rest_url( 'yourendpoint/thing' ), array(
'embeddable' => true,
) );
$response->remove_link( 'collection' );
return $response;
} );