API de WP Rest: cómo obtener una imagen destacada

24

Soy muy nuevo en esta API, de hecho, solo he pasado un par de horas hasta ahora. He hecho mi investigación pero no puedo encontrar nada al respecto ...

El problema es que parece que no puedo obtener la imagen destacada de una publicación. El JSON regresa "featured_media: 0".

getPosts: function() {
  var burl = "http://www.example.com/wp-json/wp/v2/posts";
  var dataDiv = document.getElementById('cards');
  $.ajax({
    url: burl,
    data: data,
    type: 'GET',
    async: false,
    processData: false,
    beforeSend: function (xhr) {
      if (xhr && xhr.overrideMimeType) {
        xhr.overrideMimeType('application/json;charset=utf-8');
      }
    },
    dataType: 'json',
    success: function (data) {
      console.log(data);
      //question: data->featured_image: 0?!
      var theUl = document.getElementById('cards');
      for (var key in data) {
        //data[key]['']...
        //doing my stuff here
      }
    },
    error: function(e) {
      console.log('Error: '+e);
    }  
  });
}

Definitivamente, configuré una imagen destacada en la publicación, pero los datos vuelven:

medios destacados?

Cualquier ayuda será apreciada.

Abdul Sadik Yalcin
fuente

Respuestas:

1

Eche un vistazo a un complemento llamado Better REST API Imagen destacada . Agrega la URL de la imagen destacada a la respuesta API original.

Michael Cropper
fuente
Gracias. Devuelve la URL que es útil. ¿Alguna idea de por qué el complemento no lo devuelve? ¿Estoy haciendo algo mal o es la API?
Abdul Sadik Yalcin
1
Es la API. Todavía temprano. Mejorará
Michael Cropper
1
¡Problema resuelto! En realidad, devuelve una identificación de la imagen, ¡pero olvidé por completo que tenía el caché activado! Pero de todos modos, ese complemento es mejor ya que devuelve la url directamente.
Abdul Sadik Yalcin
@Devrim ¡Me alegro de que lo hayas resuelto! Si esta respuesta de Michael lo ayudó, puede hacer clic en la marca a la izquierda para aceptarla y mostrar a los demás que esta fue la respuesta correcta. :)
Tim Malone
61

Puede obtenerlo sin complementos agregando _embedcomo parámetro a su consulta

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
Eslam Mahmoud
fuente
esto causa un problema cuando se enlaza a él en un enlace angular, haga el wp:nombre de uno de los nodos en la ruta json a la imagen. Utilicé el complemento de la otra respuesta, lo que simplifica el camino a la imagen.
Steve
1
contras: los JSON se vuelven más profesionales: no instale el complemento, no llame a otra solicitud http -> upvote
Tho Vo
1
¿Cómo debe convertir wp: Featuredmedia a JSON? Primero creo la clase wp que contienemediamedia. Pero no funciona.
Kenji
2
Puede acceder a wp: mediante el uso de esta notación post._embedded ['wp: term']
ocajian
11

NO usaría el mejor complemento API de descanso. Agregó imágenes destacadas al resto de la API, pero también lo rompió.

Esta es la solución más simple que pude encontrar que realmente funcionó. Agregue el siguiente código a su functions.php:

<?php

    function post_fetured_image_json( $data, $post, $context ) {
        $featured_image_id = $data->data['featured_media']; // get featured image id
        $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // get url of the original size

        if( $featured_image_url ) {
            $data->data['featured_image_url'] = $featured_image_url[0];
        }

        return $data;
    }
    add_filter( 'rest_prepare_post', 'post_fetured_image_json', 10, 3 );

?>
TX nulo
fuente
4

Puede obtener el nombre de la imagen con esta ruta:

array_name._embedded ['wp: Featuredmedia'] ['0']. source_url

RobK
fuente
1

Hice un acceso directo a mi imagen agregándolo directamente a la respuesta API.


//Add in functions.php, this hook is for  my 'regions' post type
add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() {
  register_rest_field( 'regions', 'group', array(
         'get_callback'    => 'get_post_meta_for_api',
         'schema'          => null,
      )
  );
}

//Use the post ID to query the image and add it to your payload
function get_post_meta_for_api( $object ) {
  $post_id = $object['id'];
  $post_meta = get_post_meta( $post_id );
  $post_image = get_post_thumbnail_id( $post_id );      
  $post_meta["group_image"] = wp_get_attachment_image_src($post_image)[0];

  return $post_meta;
}
vars
fuente