Obtener URL de imagen en lugar de ID de adjunto en la API REST

27 jun 2017, 10:37:36
Vistas: 22.4K
Votos: 8

Quiero mostrar las entradas recientes en mi aplicación Android y estoy usando este endpoint para obtener la lista de entradas https://www.geekdashboard.com/wp-json/wp/v2/posts

¿Cómo puedo obtener la URL completa de la imagen destacada en lugar de su id?

"featured_media": 39913,

No quiero usar ningún plugin, ¿es posible hacerlo usando functions.php?

1
Comentarios

puedes obtener el enlace URL del media destacado añadiendo "_embed" al final de la URL base que estás usando para obtener el post. O puedes usar "&_embed" si hay otros filtros en la URL base

saed saed
27 mar 2019 16:00:39
Todas las respuestas a la pregunta 2
2

Puedes modificar las respuestas de la API REST en el archivo functions.php del tema de la siguiente manera.

function ws_register_images_field() {
    register_rest_field( 
        'post',
        'images',
        array(
            'get_callback'    => 'ws_get_images_urls',
            'update_callback' => null,
            'schema'          => null,
        )
    );
}

add_action( 'rest_api_init', 'ws_register_images_field' );

function ws_get_images_urls( $object, $field_name, $request ) {
    $medium = wp_get_attachment_image_src( get_post_thumbnail_id( $object->id ), 'medium' );
    $medium_url = $medium['0'];

    $large = wp_get_attachment_image_src( get_post_thumbnail_id( $object->id ), 'large' );
    $large_url = $large['0'];

    return array(
        'medium' => $medium_url,
        'large'  => $large_url,
    );
}

Si no puedes modificar la respuesta de la API REST, puedes solicitar la información del medio así: curl http://tusitio.com/wp-json/wp/v2/media/<id>

27 jun 2017 11:57:25
Comentarios

Debería ser register_rest_field en lugar de register_api_field. Fue eliminado en la versión 2. Después de cambiarlo a register_rest_field, tu código funcionó. Edité tu respuesta. Por favor acéptala.

Amar Ilindra Amar Ilindra
1 jul 2017 16:57:55

El nuevo plugin tiene http://mahditajik.ir/wp-json/wp/v2/media/<id> pero contiene muchos datos adicionales que hacen lenta la respuesta, así que ¿cómo puedo personalizar la respuesta de la API REST?

Mahdi Mahdi
11 abr 2018 18:19:20
0

Modificando el ejemplo de @ville6000, pude resolver mi propio problema,

    add_action( 'rest_api_init', 'ws_register_images_field' );
function ws_register_images_field() {
    register_rest_field( 
        'post', //nombre del custom post type
        'attachment_url_images', //nombre del array de tu elección
        array(
            'get_callback'    => 'ws_get_images_urls',
            'update_callback' => null,
            'schema'          => null,
        )
    );
}


function ws_get_images_urls( $object, $field_name, $request ) {

  $custom_fields = get_post_custom($object['id']);
  $main_image = $custom_fields['your_custom_images_array_name'];
  $image_urls = array();

  foreach ( $main_image as $key => $value ) {
      $imagesID = explode(',' ,$value);
      foreach ($imagesID as $id => $value) {
        $image_urls[ $key ] = wp_get_attachment_url($value);
        //$custom_fields[ $id ] = $image_urls;
      }
  };

     return $image_urls;
   //return count($main_image);
}

Añade esto al archivo functions.php de tu tema. Feliz codificación...

4 nov 2018 19:14:30