Plugin / Better REST API Featured Images

Braad Martin

Description

Description

Note: You probably do not need this plugin. The REST API already supports adding the query param ?_embed to your URL and the response will then include all “embedded media”, including the featured image, and the data you get there is exactly what this plugin gives you. The only reasons to use this plugin at this point are if you prefer to have the featured image data in a top level field in the response rather than among other embedded media in the _embedded field, and if you always want the featured image data in the response rather than having to ask for it with ?_embed. I still use this plugin because I do usually want both these things, but definitely give ?_embed a try before using this plugin. 🙂

Version 2 of the WordPress REST API returns a featured_media field (formerly featured_image) on the post object by default, but this field is simply the image ID.

This plugin adds a better_featured_image field to the post object that contains the available image sizes and urls, allowing you to get this information without making a second request.

It takes this:

"featured_media": 13,

And turns it into this:

"featured_media": 13,
"better_featured_image": {
    "id": 13,
    "alt_text": "Hot Air Balloons",
    "caption": "The event featured hot air balloon rides",
    "description": "The hot air balloons from the big event",
    "media_type": "image",
    "media_details": {
      "width": 5760,
      "height": 3840,
      "file": "2015/09/balloons.jpg",
      "sizes": {
        "thumbnail": {
          "file": "balloons-150x150.jpg",
          "width": 150,
          "height": 150,
          "mime-type": "image/jpeg",
          "source_url": "http://api.example.com/wp-content/uploads/2015/09/balloons-150x150.jpg"
        },
        "medium": {
          "file": "balloons-300x200.jpg",
          "width": 300,
          "height": 200,
          "mime-type": "image/jpeg",
          "source_url": "http://api.example.com/wp-content/uploads/2015/09/balloons-300x200.jpg"
        },
        "large": {
          "file": "balloons-1024x683.jpg",
          "width": 1024,
          "height": 683,
          "mime-type": "image/jpeg",
          "source_url": "http://api.example.com/wp-content/uploads/2015/09/balloons-1024x683.jpg"
        },
        "post-thumbnail": {
          "file": "balloons-825x510.jpg",
          "width": 825,
          "height": 510,
          "mime-type": "image/jpeg",
          "source_url": "http://api.example.com/wp-content/uploads/2015/09/balloons-825x510.jpg"
        }
      },
      "image_meta": {
        "aperture": 6.3,
        "credit": "",
        "camera": "Canon EOS 5D Mark III",
        "caption": "",
        "created_timestamp": 1433110262,
        "copyright": "",
        "focal_length": "50",
        "iso": "100",
        "shutter_speed": "0.004",
        "title": "",
        "orientation": 1
      }
    },
    "post": null,
    "source_url": "http://api.example.com/wp-content/uploads/2015/09/balloons.jpg"
},

The format of the response is nearly identical to what you would get sending a request to /wp-json/wp/v2/media/13 or using ?_embed. When no featured image has been set on the post the better_featured_image field will have a value of null.

I’ve done some basic performance tests that indicate the difference in response times with and without this plugin to be about 10-15ms for a collection of 10 posts and 0-5ms for a single post. For me this is much faster than making a second request to /media/, especially for multiple posts.

As of version 1.1.0, there is a filter better_rest_api_featured_image that allows you to add custom data to the better_featured_image field. The filter is directly on the return value of the function that returns the better_featured_image field. This can be used to do things like add custom image meta or an SVG version of the image to the response. Here’s an example of how you might use it:

add_filter( 'better_rest_api_featured_image', 'xxx_modify_rest_api_featured_image', 10, 2 );
/**
 * Modify the Better REST API Featured Image response.
 *
 * @param   array  $featured_image  The array of image data.
 * @param   int    $image_id        The image ID.
 *
 * @return  array                   The modified image data.
 */
function xxx_modify_rest_api_featured_image( $featured_image, $image_id ) {

  // Add an extra_data_string field with a string value.
  $featured_image['extra_data_string'] = 'A custom value.';

  // Add an extra_data_array field with an array value.
  $featured_image['extra_data_array'] = array(
    'custom_key' => 'A custom value.',
  );

  return $featured_image;
}

This plugin is on on Github and pull requests are always welcome. 🙂

Ratings

5
11 reviews

Rating breakdown

Details Information

Version

1.2.1

First Released

12 Oct, 2015

Total Downloads

31,224

Wordpress Version

4.0 or higher

Tested up to:

4.6.16

Require PHP Version:

-

Tags

Contributors

Languages

The plugin hasn't been transalated in any language other than English.

DIRECTORY DISCLAIMER

The information provided in this THEME/PLUGIN DIRECTORY is made available for information purposes only, and intended to serve as a resource to enable visitors to select a relevant theme or plugin. wpSocket gives no warranty of any kind, express or implied with regard to the information, including without limitation any warranty that the particular theme or plugin that you select is qualified on your situation.

The information in the individual theme or plugin displayed in the Directory is provided by the owners and contributors themselves. wpSocket gives no warranty as to the accuracy of the information and will not be liable to you for any loss or damage suffered by you as a consequence of your reliance on the information.

Links to respective sites are offered to assist in accessing additional information. The links may be outdated or broken. Connect to outside sites at your own risk. The Theme/Plugin Directory does not endorse the content or accuracy of any listing or external website.

While information is made available, no guarantee is given that the details provided are correct, complete or up-to-date.

wpSocket is not related to the theme or plugin, and also not responsible and expressly disclaims all liability for, damages of any kind, arising out of the use, reference to, or reliance on, any information or business listed throughout our site.

Keep Leading Your Followers!
Share it for them.