WP Rest API - Cum se obține imaginea reprezentativă

30 iun. 2016, 23:58:19
Vizualizări: 89.1K
Voturi: 42

Sunt foarte nou în utilizarea acestui API, de fapt am petrecut doar câteva ore până acum cu el. Mi-am făcut documentarea dar nu pot găsi nimic despre aceasta...

Problema este că nu reușesc să obțin imaginea reprezentativă a unui articol. JSON-ul returnează "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);
      //întrebare: data->featured_image: 0?!
      var theUl = document.getElementById('cards');
      for (var key in data) {
        //data[key]['']...
        //îmi fac treaba aici
      }
    },
    error: function(e) {
      console.log('Eroare: '+e);
    }  
  });
}

Am setat cu siguranță o imagine reprezentativă pentru articol dar datele returnează:

Eroare la returnarea imaginii reprezentative în WP REST API

Orice ajutor va fi apreciat.

0
Toate răspunsurile la întrebare 9
5
98

Puteți obține acest lucru fără plugin-uri prin adăugarea parametrului _embed în interogarea dumneavoastră

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

acest lucru cauzează o problemă la legarea în Angular din cauza numelui wp: al unuia dintre nodurile din calea JSON către imagine. Am folosit plugin-ul din celălalt răspuns, care simplifică calea către imagine.

Steve Steve
9 oct. 2017 23:44:03

dezavantaje: JSON-ul devine mai greu avantaje: nu instalezi plugin, nu mai faci altă cerere http -> upvote

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

Cum ar trebui să convertesc wp:featuredmedia în JSON? Mai întâi am creat o clasă wp care conține featuredmedia. Dar nu funcționează.

Mahdi Mahdi
3 apr. 2018 09:17:59

Puteți accesa wp: folosind această notație post._embedded['wp:term']

ocajian ocajian
15 mai 2018 11:21:20

Dacă utilizați o funcție pentru a crea parametrii de interogare dintr-un array și nu puteți folosi această funcție fără combinația de cheie și valoare, puteți folosi _embed ca cheie și true ca valoare.

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

NU aș folosi plugin-ul Better REST API. Desi a adăugat imagini reprezentative în API-ul REST, totuși l-a și stricat.

Iată cea mai simplă soluție pe care am găsit-o și care chiar funcționează. Adaugă următorul cod în fișierul functions.php:

<?php

function post_featured_image_json( $data, $post, $context ) {
  $featured_image_id = $data->data['featured_media']; // obține ID-ul imaginii reprezentative
  $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // obține URL-ul imaginii în dimensiunea originală

  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 oct. 2018 23:09:54
0

Puteți obține numele imaginii cu acest path:

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

31 ian. 2018 19:16:25
4

Aruncă o privire la un plugin numit Better REST API Featured Image. Acesta adaugă URL-ul imaginii reprezentative în răspunsul original al API-ului.

1 iul. 2016 00:02:43
Comentarii

Mulțumesc. Returnează URL-ul, ceea ce este util. Ai vreo idee de ce plugin-ul în sine nu îl returnează? Fac ceva greșit sau este din partea API-ului?

Abdul Sadik Yalcin Abdul Sadik Yalcin
1 iul. 2016 00:06:47

Este din partea API-ului. Încă suntem la început. Se va îmbunătăți.

Michael Cropper Michael Cropper
1 iul. 2016 00:08:17

Problemă rezolvată! De fapt returnează un ID al imaginii, dar am uitat complet că aveam cache-ul activat! Oricum, acel plugin este mai bun pentru că returnează URL-ul direct.

Abdul Sadik Yalcin Abdul Sadik Yalcin
1 iul. 2016 01:14:06

@Devrim Mă bucur că ai rezolvat! Dacă acest răspuns de la Michael ți-a fost de ajutor, poți să dai clic pe bifa din stânga lui pentru a-l accepta și a arăta altora că acesta a fost răspunsul corect. :)

Tim Malone Tim Malone
1 iul. 2016 02:34:31
0

Am creat o scurtătură pentru imaginea mea adăugând-o direct în răspunsul API.


//Adăugați în functions.php, acest hook este pentru tipul meu de postare '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,
      )
  );
}

//Folosiți ID-ul postării pentru a interoga imaginea și a o adăuga în 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 sept. 2018 01:16:49
0

Lipiți acest cod în fișierul functions.php al temei dumneavoastră și utilizați această cheie pentru imaginea reprezentativă: featured_image_url

function post_featured_image_json( $data, $post, $context ) {
  $featured_image_id = $data->data['featured_media']; // obține ID-ul imaginii reprezentative
  $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // obține URL-ul dimensiunii 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

Încearcă în felul următor ....................

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

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

Funcționează corect. Încearcă.

15 iul. 2020 21:14:14
0

Am instalat plugin-ul Yoast SEO și am descoperit că URL-ul imaginii prezentate este disponibil acolo. După URL: /wp-json/wp/v2/posts?_embed

Puteți găsi imaginea prezentată în: yoast_head_json > robots > og_image > url

17 feb. 2022 11:31:11
1
  1. Instalează pluginul Yoast SEO

  2. Obține date din API-ul REST al WordPress în JavaScript

     async function fetchPosts() {
     const responce = await fetch('https://example.com/wp-json/wp/v2/posts');
     return responce.json();}
    
  3. Afisez 10 imagini în HTML (am folosit ID = posts în fișierul .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="Imagine postare ${i+1}" title="Postare ${i+1}"></img>`;
         images += obj;
         document.getElementById('posts').innerHTML = `${images}`
     }})()
    
19 feb. 2022 16:17:52
Comentarii

Poți să editezi cele două răspunsuri într-unul singur? Se pare că oferă aceeași soluție.

Rup Rup
2 mar. 2022 17:35:30