Prepares a single post output for response.
Parameters
$item
WP_Postrequired- Post object.
$request
WP_REST_Requestrequired- Request object.
Source
public function prepare_item_for_response( $item, $request ) {
// Base fields for every post.
$fields = $this->get_fields_for_response( $request );
$menu_item = $this->get_nav_menu_item( $item->ID );
$data = array();
if ( rest_is_field_included( 'id', $fields ) ) {
$data['id'] = $menu_item->ID;
}
if ( rest_is_field_included( 'title', $fields ) ) {
$data['title'] = array();
}
if ( rest_is_field_included( 'title.raw', $fields ) ) {
$data['title']['raw'] = $menu_item->title;
}
if ( rest_is_field_included( 'title.rendered', $fields ) ) {
add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
/** This filter is documented in wp-includes/post-template.php */
$title = apply_filters( 'the_title', $menu_item->title, $menu_item->ID );
$data['title']['rendered'] = $title;
remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
}
if ( rest_is_field_included( 'status', $fields ) ) {
$data['status'] = $menu_item->post_status;
}
if ( rest_is_field_included( 'url', $fields ) ) {
$data['url'] = $menu_item->url;
}
if ( rest_is_field_included( 'attr_title', $fields ) ) {
// Same as post_excerpt.
$data['attr_title'] = $menu_item->attr_title;
}
if ( rest_is_field_included( 'description', $fields ) ) {
// Same as post_content.
$data['description'] = $menu_item->description;
}
if ( rest_is_field_included( 'type', $fields ) ) {
$data['type'] = $menu_item->type;
}
if ( rest_is_field_included( 'type_label', $fields ) ) {
$data['type_label'] = $menu_item->type_label;
}
if ( rest_is_field_included( 'object', $fields ) ) {
$data['object'] = $menu_item->object;
}
if ( rest_is_field_included( 'object_id', $fields ) ) {
// It is stored as a string, but should be exposed as an integer.
$data['object_id'] = absint( $menu_item->object_id );
}
if ( rest_is_field_included( 'parent', $fields ) ) {
// Same as post_parent, exposed as an integer.
$data['parent'] = (int) $menu_item->menu_item_parent;
}
if ( rest_is_field_included( 'menu_order', $fields ) ) {
// Same as post_parent, exposed as an integer.
$data['menu_order'] = (int) $menu_item->menu_order;
}
if ( rest_is_field_included( 'target', $fields ) ) {
$data['target'] = $menu_item->target;
}
if ( rest_is_field_included( 'classes', $fields ) ) {
$data['classes'] = (array) $menu_item->classes;
}
if ( rest_is_field_included( 'xfn', $fields ) ) {
$data['xfn'] = array_map( 'sanitize_html_class', explode( ' ', $menu_item->xfn ) );
}
if ( rest_is_field_included( 'invalid', $fields ) ) {
$data['invalid'] = (bool) $menu_item->_invalid;
}
if ( rest_is_field_included( 'meta', $fields ) ) {
$data['meta'] = $this->meta->get_value( $menu_item->ID, $request );
}
$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );
foreach ( $taxonomies as $taxonomy ) {
$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
if ( rest_is_field_included( $base, $fields ) ) {
$terms = get_the_terms( $item, $taxonomy->name );
if ( ! is_array( $terms ) ) {
continue;
}
$term_ids = $terms ? array_values( wp_list_pluck( $terms, 'term_id' ) ) : array();
if ( 'nav_menu' === $taxonomy->name ) {
$data[ $base ] = $term_ids ? array_shift( $term_ids ) : 0;
} else {
$data[ $base ] = $term_ids;
}
}
}
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
$data = $this->add_additional_fields_to_object( $data, $request );
$data = $this->filter_response_by_context( $data, $context );
// Wrap the data in a response object.
$response = rest_ensure_response( $data );
if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
$links = $this->prepare_links( $item );
$response->add_links( $links );
if ( ! empty( $links['self']['href'] ) ) {
$actions = $this->get_available_actions( $item, $request );
$self = $links['self']['href'];
foreach ( $actions as $rel ) {
$response->add_link( $rel, $self );
}
}
}
/**
* Filters the menu item data for a REST API response.
*
* @since 5.9.0
*
* @param WP_REST_Response $response The response object.
* @param object $menu_item Menu item setup by wp_setup_nav_menu_item().
* @param WP_REST_Request $request Request object.
*/
return apply_filters( 'rest_prepare_nav_menu_item', $response, $menu_item, $request );
}
Hooks
- apply_filters( ‘rest_prepare_nav_menu_item’,
WP_REST_Response $response ,object $menu_item ,WP_REST_Request $request ) Filters the menu item data for a REST API response.
- apply_filters( ‘the_title’,
string $post_title ,int $post_id ) Filters the post title.
Changelog
Version | Description |
---|---|
5.9.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.