get_posts() does not return featured_image field on Wordpress custom endpoint

Viewed 123

Trying to get only the needed data on a custom endpoint in Wordpress. To do so, I am using get_posts() function.

add_action('rest_api_init', function() {
  register_rest_route('wl/v1', 'pages', [
    'methods' => 'GET',
    'callback' => 'wl_page',
  ]);
});


 function wl_page() {

  $args = [
    'numberposts' => 99999,
    'post_type' => 'page',
    'post_parent' => 0,
  ];

  $posts = get_posts($args);

  $data = [];

  $data['ID'] = $posts[0]->ID;
  $data['title'] = $posts[0]->post_title;
  $data['content'] = $posts[0]->post_content;
  $data['featured_image'] = $posts[0]->featured_media;

   return $data;
 }

It should return the ID of the featured image, but get_posts() doesn't even return that field.

1 Answers

get_posts returns array of Post Objects which don't have featured_media property available. Use get_post_thumbnail_id() instead.

See updated code below:

add_action('rest_api_init', function() {
  register_rest_route('wl/v1', 'pages', [
    'methods' => 'GET',
    'callback' => 'wl_page',
  ]);
});


 function wl_page() {

  $args = [
    'numberposts' => 99999,
    'post_type' => 'page',
    'post_parent' => 0,
  ];

  $posts = get_posts($args);

  $data = [];

  $data['ID'] = $posts[0]->ID;
  $data['title'] = $posts[0]->post_title;
  $data['content'] = $posts[0]->post_content;
  $data['featured_image'] = get_post_thumbnail_id( $posts[0]->ID );

   return $data;
 }
Related