I have removed unwanted data by unset($data->data['field_name'])
from json output. For this I am using wordpress filter rest_prepare_
.
But how we remove _links object from JSON output?
I have removed unwanted data by unset($data->data['field_name'])
from json output. For this I am using wordpress filter rest_prepare_
.
But how we remove _links object from JSON output?
I don’t know how to unset, but you can set which variables to return.
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);
Gotta be careful removing stuff from the API, but if you're sure you want to remove this, it can be done like this:
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);
I'd recommend only doing so if you're explicitly asking for a smaller response in your implementation with the API, thereby leaving default usage of the API untouched, like via a query variable:
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);
This is not very good solution but work.
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 );
The rest_prepare_post
is the right filter to use, but the _links
field is dynamically generated by WordPress. So you can’t remove things to it directly.
you can add your own link
in this parameter or you can remove the default link from the "_links".
Here is the code....
add_filter( 'rest_prepare_post', function ( $response ) {
$response->add_link( 'yourrel', rest_url( 'yourendpoint/thing' ), array(
'embeddable' => true,
) );
$response->remove_link( 'collection' );
return $response;
} );
routes
->_links
-> self
-> href
as well as the root url
and home
with another link? –
Emend 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 ) {
© 2022 - 2024 — McMap. All rights reserved.