API WP Rest - Come ottenere l'immagine in primo piano


24

Sono molto nuovo di questa API, in effetti ci ho passato solo un paio d'ore finora. Ho fatto le mie ricerche ma non riesco a trovare nulla al riguardo ...

Il problema è che non riesco a ottenere l'immagine in primo piano di un post. Il JSON ritorna "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);
    }  
  });
}

Ho sicuramente impostato un'immagine in primo piano sul post ma i dati restituiscono:

media in primo piano?

Qualsiasi aiuto sarà apprezzato.

Risposte:


1

Dai un'occhiata a un plug-in chiamato Better REST API Featured Image . Aggiunge l'URL dell'immagine in primo piano alla risposta API originale.


Grazie. Restituisce l'URL che è utile. Qualche idea sul perché il plugin stesso non lo stia restituendo? Sto facendo qualcosa di sbagliato o è l'API?
Abdul Sadik Yalcin,

1
È l'API. Ancora primi giorni. Migliorerà
Michael Cropper il

1
Problema risolto! In realtà restituisce un ID dell'immagine ma ho completamente dimenticato di aver attivato la cache! Ma comunque, quel plugin è migliore in quanto restituisce direttamente l'URL.
Abdul Sadik Yalcin,

@Devrim Sono contento che tu l'abbia risolto! Se questa risposta di Michael ti ha aiutato, puoi fare clic sul segno di spunta a sinistra per accettarlo per mostrare agli altri che questa era la risposta corretta. :)
Tim Malone,

61

Puoi ottenerlo senza plugin aggiungendo _embedcome parametro alla tua query

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed

ciò causa un problema quando si esegue il binding ad esso in un binding Angolare, fare al wp:nome di uno dei nodi nel percorso json all'immagine. Ho usato il plug-in dall'altra risposta, il che semplifica il percorso dell'immagine.
Steve,

1
contro: i JSON ottengono professionisti più pesanti: non installare plug-in, non chiamare un'altra richiesta http -> upvote
Tho Vo

1
Come dovrebbe convertire wp: optionalmedia in JSON? per prima cosa creo la classe wp che contiene featuresmedia. Ma non funziona
Kenji,

2
Puoi accedere a wp: usando questa notazione post._embedded ['wp: term']
ocajian

11

NON utilizzerei il plug-in API di riposo migliore. Ha aggiunto immagini in primo piano al resto api ma lo ha anche rotto.

Questa è la soluzione più semplice che sono riuscito a trovare che funzionasse davvero. Aggiungi il seguente codice a 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 );

?>

4

Puoi ottenere il nome dell'immagine con questo percorso:

array_name._embedded [ 'wp: featuredmedia']. [ '0'] SOURCE_URL


1

Ho creato una scorciatoia per la mia immagine aggiungendola direttamente alla risposta 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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.