¿Cómo usar wp:featuredmedia en la respuesta de la API REST de WP?

2 minutos de lectura

Estoy tratando de obtener publicaciones de blog de otro sitio de WordPress, a partir de ahora estoy obteniendo con éxito las publicaciones, estoy usando el siguiente fragmento:

$response = wp_remote_get( add_query_arg( array(
    'per_page' => 1,
     'categories' => 38
     ), 'https://www.remotesite.com/wp-json/wp/v2/posts?_embed' ) 
);
if( !is_wp_error( $response ) && $response['response']['code'] == 200 ) {

   $remote_posts = json_decode( $response['body'] ); 
    foreach( $remote_posts as $remote_post ) {
    echo '<h2>'. $remote_post->title->rendered . '</h2>
           <p>' . $remote_post->excerpt->rendered . '</p>';     

   }
 }

con el código anterior, puedo obtener todos los detalles requeridos, el título, el extracto y la imagen destacada. Pero me está costando mucho encontrar la forma de obtener la URL de la imagen destacada de la respuesta anterior. ¿Alguien puede decirme cómo usar wp:featuredmedia de la respuesta. He visto en alguna parte el siguiente código para obtener la URL de la imagen destacada, pero esto no me ayudó:

echo [your-data]._embedded['wp:featuredmedia']['0'].source_url

Según su código, la URL de la imagen destacada se puede recuperar de esta manera:

$remote_post->_embedded->{'wp:featuredmedia'}[0]->source_url

Sin embargo, esa es la versión de tamaño completo del archivo de imagen presentado.

Para obtener la URL de un tamaño de miniatura específico, puede acceder desde:

$remote_post->_embedded->{'wp:featuredmedia'}[0]->media_details->sizes

.. que es un array de object datos (a menos, por supuesto, que utilice true en el segundo parámetro de la json_decode() función).

De forma predeterminada, los tamaños de miniatura disponibles son: thumbnail, mediumy medium_large. Aquí hay un ejemplo para el medium Talla:

$remote_post->_embedded->{'wp:featuredmedia'}[0]->media_details->sizes->medium->source_url

Así que prueba esto foreach:

foreach( $remote_posts as $remote_post ) {
    $thumb_full_url="";
    $thumb_url="";

    if ( ! empty( $remote_post->featured_media ) && isset( $remote_post->_embedded ) ) {
        $thumb_full_url = $remote_post->_embedded->{'wp:featuredmedia'}[0]->source_url;
        $thumb_url = $remote_post->_embedded->{'wp:featuredmedia'}[0]->media_details->sizes->medium->source_url;
    }

    echo '<h2>'. $remote_post->title->rendered . '</h2>' .
        '<p>' . $remote_post->excerpt->rendered . '</p>' .
        '<p>' .
            'Medium-sized thumbnail: ' . $thumb_url . '<br>' .
            'Full-sized / source: ' . $thumb_full_url .
        '</p>';
}

¿Ha sido útil esta solución?