Ottenere l'URL dell'Immagine invece dell'ID Allegato nelle REST API

27 giu 2017, 10:37:36
Visualizzazioni: 22.4K
Voti: 8

Voglio mostrare i post recenti nella mia applicazione Android e sto utilizzando questo endpoint per ottenere la lista dei post https://www.geekdashboard.com/wp-json/wp/v2/posts

Come posso ottenere l'URL completo dell'immagine in evidenza invece del suo id?

"featured_media": 39913,

Non voglio utilizzare plugin, è possibile farlo usando functions.php?

1
Commenti

puoi ottenere l'URL del media in evidenza aggiungendo "_embed" alla fine dell'URL base che stai utilizzando per ottenere il post. Oppure puoi usare "&_embed" se ci sono altri filtri per l'URL base

saed saed
27 mar 2019 16:00:39
Tutte le risposte alla domanda 2
2

Puoi modificare le risposte dell'API REST nel file functions.php del tema in questo modo.

function ws_register_images_field() {
    register_rest_field( 
        'post',
        'images',
        array(
            'get_callback'    => 'ws_get_images_urls',  // Callback per ottenere i dati
            'update_callback' => null,                   // Nessun callback per l'aggiornamento
            'schema'          => null,                   // Schema non definito
        )
    );
}

// Aggiunge l'azione all'inizializzazione dell'API REST
add_action( 'rest_api_init', 'ws_register_images_field' );

function ws_get_images_urls( $object, $field_name, $request ) {
    // Ottiene l'URL dell'immagine in formato medium
    $medium = wp_get_attachment_image_src( get_post_thumbnail_id( $object->id ), 'medium' );
    $medium_url = $medium['0'];

    // Ottiene l'URL dell'immagine in formato large
    $large = wp_get_attachment_image_src( get_post_thumbnail_id( $object->id ), 'large' );
    $large_url = $large['0'];

    // Restituisce un array con gli URL delle immagini
    return array(
        'medium' => $medium_url,
        'large'  => $large_url,
    );
}

Se non puoi modificare la risposta dell'API REST, puoi richiedere le informazioni sui media in questo modo: curl http://tuo-sito.com/wp-json/wp/v2/media/<id>

27 giu 2017 11:57:25
Commenti

Dovrebbe essere register_rest_field invece di register_api_field. È stato rimosso nella versione 2. Dopo averlo cambiato in register_rest_field, il tuo codice ha funzionato. Ho modificato la tua risposta. Per favore accettala.

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

Il nuovo plugin ha http://mahditajik.ir/wp-json/wp/v2/media/<id> ma contiene molti dati extra che rendono la risposta lenta, quindi come posso personalizzare la risposta dell'API REST?

Mahdi Mahdi
11 apr 2018 18:19:20
0

Modificando l'esempio di @ville6000, sono riuscito a risolvere il mio problema,

    add_action( 'rest_api_init', 'ws_register_images_field' );
function ws_register_images_field() {
    register_rest_field( 
        'post', //nome del custom post
        'attachment_url_images', //nome dell'array a tua scelta
        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);
}

Aggiungi al file functions.php del tema Buona programmazione...

4 nov 2018 19:14:30