Better REST API Featured Images
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. 🙂
Top keywords
- image33×4.94%
- featured24×3.59%
- featured image18×2.69%
- api12×1.80%
- data10×1.50%
- field10×1.50%
- jpg10×1.50%
- media9×1.35%
- better7×1.05%
- response7×1.05%
- rest7×1.05%
- rest api7×1.05%
Post Duplicator
Save Time. Work Smarter. Duplicate Any Post Type with Ease. Post Duplicator is the ultimate WordPress plugin for quickly creating exact duplicates of any post type in your WordPress site. Whether you’re working with standard posts, pages, or custom post types, this plugin makes it effortless to clone content while preserving all taxonomies, custom fields, and metadata. Key Features: Universal Post Type Support – Works with every post type WordPress supports, including custom post types from your favorite plugins and themes Complete Data Preservation – Automatically copies all taxonomies, custom fields, metadata, and featured images Bulk Duplication – Select and duplicate multiple posts at once with individual settings per post Multiple Clones – Create multiple copies of a single post simultaneously (up to 50 clones) Flexible Duplication Options – Customize title, slug, status, author, date, post type, and parent for each duplicate Featured Image Management – Set, replace, or remove featured images directly in the duplication modal Smart Defaults – Configure default settings that apply to all duplications (draft status, current user as author) Post Types Configuration – Control which post types can be duplicated and which appear in the “Post Type” dropdown menu Permission Control – Granular control over who can duplicate posts with role-based permissions Modern Interface – Beautiful modal interface with live editing and expandable settings Cross-Post Type Duplication – Convert posts to different post types during duplication Hierarchical Post Support – Set parent posts for pages and hierarchical custom post types One-Click Operation – Duplicate posts from the posts list, edit screen, or block editor toolbar Perfect For: Developers – Quickly generate test content and dummy data for development using bulk or multiple clone features Content Managers – Create content templates and variations efficiently with one-click duplication Bloggers – Repurpose successful posts with different angles or formats using multiple clones E-commerce – Duplicate product variations and bulk duplicate similar listings across categories Content Marketers – Create A/B testing variations with the multiple clones feature Site Migrations – Bulk duplicate posts when restructuring or migrating content Multilingual Sites – Works seamlessly with WPML and Polylang for multilingual content What Gets Duplicated: Post content and formatting Title and slug (with customizable suffixes or full editing) All custom fields and metadata Categories, tags, and custom taxonomies Featured images (with ability to change or remove) Post format and excerpt Comment and ping status Menu order Post parent (for hierarchical post types) What Doesn’t Get Duplicated: Comments (by design – prevents duplicate comment threads) Post ID and GUID (new unique identifiers assigned) How to Use: Single Duplication: Hover over any post and click “Duplicate [Post Type]” in the row actions, or click the “Duplicate Post” button in the Gutenberg editor Multiple Clones: In the duplication modal, click the copy icon to create multiple copies of a single post (up to 50 clones) Bulk Duplication: Select multiple posts using checkboxes, choose “Duplicate” from the Bulk Actions dropdown, then configure each post individually Customize Settings: Edit title, slug, status, author, date, post type, featured image, and parent for each duplicate Configure Defaults: Go to Settings > Post Duplicator to set default status, author, date, and title/slug suffixes Configure Post Types: Go to Settings > Post Duplicator > Post Types to control which post types can be duplicated and which appear in the “Post Type” dropdown menu Default Settings: The plugin works immediately with sensible defaults: * Duplicated posts are created as Drafts (prevents accidental publishing) * Title suffix: “Copy” * Slug suffix: “copy” * Author: Current User * Date: Current Time All defaults can be customized in Settings > Post Duplicator. Integration: Post Duplicator works seamlessly with: * WPML and Polylang (multilingual support) * WooCommerce (excludes review counts automatically) * ACF (Advanced Custom Fields) – preserves all field data * WP Customer Area (special file duplication support) * All custom post types and taxonomies Security: Users without publish_posts capability cannot publish duplicates (forced to Pending) Non-authors cannot duplicate unpublished posts from other users Granular permission system controls who can duplicate posts All data is sanitized and validated before duplication Developer-Friendly: Includes hooks and filters for easy customization: * mtphr_post_duplicator_created action * mtphr_post_duplicator_meta_{$key}_enabled filter * mtphr_post_duplicator_meta_value filter