WP_REST_Posts_Controller::prepare_item_for_response PHP Method

prepare_item_for_response() public method

Prepares a single post output for response.
Since: 4.7.0
public prepare_item_for_response ( WP_Post $post, WP_REST_Request $request ) : WP_REST_Response
$post WP_Post Post object.
$request WP_REST_Request Request object.
return WP_REST_Response Response object.
    public function prepare_item_for_response($post, $request)
    {
        $GLOBALS['post'] = $post;
        setup_postdata($post);
        $schema = $this->get_item_schema();
        // Base fields for every post.
        $data = array();
        if (!empty($schema['properties']['id'])) {
            $data['id'] = $post->ID;
        }
        if (!empty($schema['properties']['date'])) {
            $data['date'] = $this->prepare_date_response($post->post_date_gmt, $post->post_date);
        }
        if (!empty($schema['properties']['date_gmt'])) {
            $data['date_gmt'] = $this->prepare_date_response($post->post_date_gmt);
        }
        if (!empty($schema['properties']['guid'])) {
            $data['guid'] = array('rendered' => apply_filters('get_the_guid', $post->guid), 'raw' => $post->guid);
        }
        if (!empty($schema['properties']['modified'])) {
            $data['modified'] = $this->prepare_date_response($post->post_modified_gmt, $post->post_modified);
        }
        if (!empty($schema['properties']['modified_gmt'])) {
            $data['modified_gmt'] = $this->prepare_date_response($post->post_modified_gmt);
        }
        if (!empty($schema['properties']['password'])) {
            $data['password'] = $post->post_password;
        }
        if (!empty($schema['properties']['slug'])) {
            $data['slug'] = $post->post_name;
        }
        if (!empty($schema['properties']['status'])) {
            $data['status'] = $post->post_status;
        }
        if (!empty($schema['properties']['type'])) {
            $data['type'] = $post->post_type;
        }
        if (!empty($schema['properties']['link'])) {
            $data['link'] = get_permalink($post->ID);
        }
        if (!empty($schema['properties']['title'])) {
            add_filter('protected_title_format', array($this, 'protected_title_format'));
            $data['title'] = array('raw' => $post->post_title, 'rendered' => get_the_title($post->ID));
            remove_filter('protected_title_format', array($this, 'protected_title_format'));
        }
        $has_password_filter = false;
        if ($this->can_access_password_content($post, $request)) {
            // Allow access to the post, permissions already checked before.
            add_filter('post_password_required', '__return_false');
            $has_password_filter = true;
        }
        if (!empty($schema['properties']['content'])) {
            $data['content'] = array('raw' => $post->post_content, 'rendered' => post_password_required($post) ? '' : apply_filters('the_content', $post->post_content), 'protected' => (bool) $post->post_password);
        }
        if (!empty($schema['properties']['excerpt'])) {
            /** This filter is documented in wp-includes/post-template.php */
            $excerpt = apply_filters('the_excerpt', apply_filters('get_the_excerpt', $post->post_excerpt, $post));
            $data['excerpt'] = array('raw' => $post->post_excerpt, 'rendered' => post_password_required($post) ? '' : $excerpt, 'protected' => (bool) $post->post_password);
        }
        if ($has_password_filter) {
            // Reset filter.
            remove_filter('post_password_required', '__return_false');
        }
        if (!empty($schema['properties']['author'])) {
            $data['author'] = (int) $post->post_author;
        }
        if (!empty($schema['properties']['featured_media'])) {
            $data['featured_media'] = (int) get_post_thumbnail_id($post->ID);
        }
        if (!empty($schema['properties']['parent'])) {
            $data['parent'] = (int) $post->post_parent;
        }
        if (!empty($schema['properties']['menu_order'])) {
            $data['menu_order'] = (int) $post->menu_order;
        }
        if (!empty($schema['properties']['comment_status'])) {
            $data['comment_status'] = $post->comment_status;
        }
        if (!empty($schema['properties']['ping_status'])) {
            $data['ping_status'] = $post->ping_status;
        }
        if (!empty($schema['properties']['sticky'])) {
            $data['sticky'] = is_sticky($post->ID);
        }
        if (!empty($schema['properties']['template'])) {
            if ($template = get_page_template_slug($post->ID)) {
                $data['template'] = $template;
            } else {
                $data['template'] = '';
            }
        }
        if (!empty($schema['properties']['format'])) {
            $data['format'] = get_post_format($post->ID);
            // Fill in blank post format.
            if (empty($data['format'])) {
                $data['format'] = 'standard';
            }
        }
        if (!empty($schema['properties']['meta'])) {
            $data['meta'] = $this->meta->get_value($post->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 (!empty($schema['properties'][$base])) {
                $terms = get_the_terms($post, $taxonomy->name);
                $data[$base] = $terms ? array_values(wp_list_pluck($terms, 'term_id')) : array();
            }
        }
        $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);
        $response->add_links($this->prepare_links($post));
        /**
         * Filters the post data for a response.
         *
         * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
         *
         * @since 4.7.0
         *
         * @param WP_REST_Response $response The response object.
         * @param WP_Post          $post     Post object.
         * @param WP_REST_Request  $request  Request object.
         */
        return apply_filters("rest_prepare_{$this->post_type}", $response, $post, $request);
    }

Usage Example

示例#1
0
文件: api.php 项目: tormjens/ngpress
/**
 * Prepare term
 * @param  WP_REST_Response $response
 * @param  WP_Term $term
 * @param  WP_REST_Request $request
 * @return WP_REST_Response
 */
function anunang_api_prepare_term($response, $term, $request)
{
    $args = array('tax_query' => array(array('taxonomy' => $term->taxonomy, 'field' => 'slug', 'terms' => $term->slug)), 'posts_per_page' => 5);
    $posts = get_posts($args);
    $posts_arr = array();
    foreach ($posts as $p) {
        $rest_post = new WP_REST_Posts_Controller($p->post_type);
        $posts_arr[] = $rest_post->prepare_item_for_response($p, $request)->data;
    }
    $response->data['posts'] = $posts_arr;
    return $response;
}
All Usage Examples Of WP_REST_Posts_Controller::prepare_item_for_response