WP Rest API - Come ottenere l'immagine in evidenza

30 giu 2016, 23:58:19
Visualizzazioni: 89.1K
Voti: 42

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

Il problema è che non riesco a ottenere l'immagine in evidenza di un post. Il JSON restituisce "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);
      //domanda: data->featured_image: 0?!
      var theUl = document.getElementById('cards');
      for (var key in data) {
        //data[key]['']...
        //faccio le mie cose qui
      }
    },
    error: function(e) {
      console.log('Error: '+e);
    }  
  });
}

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

Immagine in evidenza non trovata nell'API REST di WordPress

Ogni aiuto sarà apprezzato.

0
Tutte le risposte alla domanda 9
5
98

Puoi ottenerlo senza plugin aggiungendo _embed come parametro alla tua query

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
31 mag 2017 18:56:13
Commenti

questo causa un problema quando si effettua il binding in Angular, a causa del prefisso wp: nel nome di uno dei nodi nel percorso JSON che porta all'immagine. Ho utilizzato il plugin dell'altra risposta, che semplifica il percorso per raggiungere l'immagine.

Steve Steve
9 ott 2017 23:44:03

contro: il JSON diventa più pesante pro: non installare plugin, non effettuare un'altra richiesta HTTP -> upvote

Raphaël VO Raphaël VO
21 nov 2017 19:10:12

Come dovrei convertire wp:featuredmedia in JSON? Per prima cosa ho creato una classe wp che contiene featuredmedia. Ma non funziona.

Mahdi Mahdi
3 apr 2018 09:17:59

Puoi accedere a wp: utilizzando questa notazione post._embedded['wp:term']

ocajian ocajian
15 mag 2018 11:21:20

Se usi una funzione per creare i parametri della query da un array e non puoi usare questa funzione senza la combinazione di chiave e valore, puoi usare _embed come chiave e true come valore.

sneaky sneaky
11 nov 2020 10:11:29
0
17

NON utilizzerei il plugin Better REST API. Ha aggiunto le immagini in evidenza all'API REST, ma l'ha anche danneggiata.

Questa è la soluzione più semplice che ho trovato e che funziona davvero. Aggiungi il seguente codice al tuo functions.php:

<?php

function post_featured_image_json( $data, $post, $context ) {
  $featured_image_id = $data->data['featured_media']; // ottieni l'ID dell'immagine in evidenza
  $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // ottieni l'URL della dimensione originale

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

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

22 ott 2018 23:09:54
0

Puoi ottenere il nome dell'immagine con questo percorso:

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

31 gen 2018 19:16:25
4

Dai un'occhiata a un plugin chiamato Better REST API Featured Image. Aggiunge l'URL dell'immagine in evidenza alla risposta originale dell'API.

1 lug 2016 00:02:43
Commenti

Grazie. Restituisce l'URL che è utile. Hai qualche idea sul perché il plugin stesso non lo restituisce? Sto facendo qualcosa di sbagliato o è l'API?

Abdul Sadik Yalcin Abdul Sadik Yalcin
1 lug 2016 00:06:47

È l'API. Sono ancora i primi giorni. Migliorerà.

Michael Cropper Michael Cropper
1 lug 2016 00:08:17

Problema risolto! In realtà restituisce un ID dell'immagine ma mi ero completamente dimenticato di avere la cache attiva! Comunque, quel plugin è migliore perché restituisce direttamente l'URL.

Abdul Sadik Yalcin Abdul Sadik Yalcin
1 lug 2016 01:14:06

@Devrim Sono felice che tu l'abbia risolto! Se questa risposta di Michael ti è stata utile, puoi cliccare il segno di spunta alla sua sinistra per accettarla e mostrare agli altri che questa era la risposta corretta. :)

Tim Malone Tim Malone
1 lug 2016 02:34:31
0

Ho creato un collegamento rapido alla mia immagine aggiungendola direttamente alla risposta dell'API.


//Aggiungi in functions.php, questo hook è per il mio post type 'regions'
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,
      )
  );
}

//Usa l'ID del post per interrogare l'immagine e aggiungerla al tuo 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;
}
29 set 2018 01:16:49
0

Incolla questo codice nel file functions.php del tuo tema e usa questa chiave per l'immagine in evidenza: featured_image_url

function post_featured_image_json( $data, $post, $context ) {
  $featured_image_id = $data->data['featured_media']; // ottieni l'ID dell'immagine in evidenza
  $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // ottieni l'URL della dimensione originale

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

  return $data;
}
add_filter( 'rest_prepare_post', 'post_featured_image_json', 10, 3 );
16 mar 2022 18:25:17
0

Prova in questo modo ....................

URL: /wp-json/wp/v2/posts?_embed

immagine: json["_embedded"]["wp:featuredmedia"][0]["source_url"],

Funziona correttamente. Prova

15 lug 2020 21:14:14
0

Ho installato il plugin Yoast SEO e ho scoperto che l'URL dell'immagine in evidenza è disponibile lì. Dopo URL: /wp-json/wp/v2/posts?_embed

Puoi trovare l'immagine in evidenza in: yoast_head_json > robots > og_image > url

17 feb 2022 11:31:11
1
  1. Installa il plugin Yoast SEO

  2. Ottieni dati dall'API REST di WordPress in JavaScript

     async function fetchPosts() {
     const responce = await fetch('https://example.com/wp-json/wp/v2/posts');
     return responce.json();}
    
  3. Sto visualizzando 10 immagini in HTML (ho usato ID = posts nel file .html)

     (async () => {
     var images = '';
     for (var i = 0; i < 10; i++) {
         var obj = `<img src = '${(await fetchPosts())[i].yoast_head_json.og_image[0].url}' width="500" alt="Immagine del post ${i+1}" title="Miniatura del post ${i+1}"></img>`;
         images += obj;
         document.getElementById('posts').innerHTML = `${images}`
     }})()
    
19 feb 2022 16:17:52
Commenti

Forse potresti unire le tue due risposte? Sembra che stiano fornendo la stessa soluzione.

Rup Rup
2 mar 2022 17:35:30