WP Rest API - Как получить изображение записи

30 июн. 2016 г., 23:58:19
Просмотры: 89.1K
Голосов: 42

Я очень новичок в этом API, фактически я потратил на него всего пару часов. Я провел исследование, но не смог найти ничего об этом...

Проблема в том, что я не могу получить изображение записи. JSON возвращает "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);
      //вопрос: data->featured_image: 0?!
      var theUl = document.getElementById('cards');
      for (var key in data) {
        //data[key]['']...
        //выполняю свой код здесь
      }
    },
    error: function(e) {
      console.log('Error: '+e);
    }  
  });
}

Я определенно установил изображение записи в посте, но данные возвращают:

Возвращаемое значение featured_media равно 0 в REST API WordPress

Буду благодарен за любую помощь.

0
Все ответы на вопрос 9
5
98

Вы можете получить это без плагинов, добавив параметр _embed в ваш запрос:

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
31 мая 2017 г. 18:56:13
Комментарии

это вызывает проблему при привязке к нему в Angular binding, из-за wp: в имени одного из узлов в json path к изображению. Я использовал плагин из другого ответа, который упрощает путь к изображению.

Steve Steve
9 окт. 2017 г. 23:44:03

минусы: JSON становится тяжелее плюсы: не нужно устанавливать плагин, не нужно делать дополнительный http запрос -> голосую за

Raphaël VO Raphaël VO
21 нояб. 2017 г. 19:10:12

Как преобразовать wp:featuredmedia в JSON? Сначала я создал класс wp содержащий featuredmedia. Но это не сработало.

Mahdi Mahdi
3 апр. 2018 г. 09:17:59

Вы можете получить доступ к wp: используя эту запись post._embedded['wp:term']

ocajian ocajian
15 мая 2018 г. 11:21:20

Если вы используете функцию для создания параметров запроса из массива и не можете использовать эту функцию без комбинации ключа и значения, вы можете использовать _embed в качестве ключа и true в качестве значения.

sneaky sneaky
11 нояб. 2020 г. 10:11:29
0
17

Я НЕ рекомендую использовать плагин Better REST API. Хоть он и добавляет изображения записи в REST API, но также может его сломать.

Вот самое простое решение, которое действительно работает. Добавьте следующий код в ваш functions.php:

<?php

function post_featured_image_json( $data, $post, $context ) {
  $featured_image_id = $data->data['featured_media']; // получаем ID изображения записи
  $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // получаем URL изображения в оригинальном размере

  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 окт. 2018 г. 23:09:54
0

Вы можете получить имя изображения по следующему пути:

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

31 янв. 2018 г. 19:16:25
4

Ознакомьтесь с плагином под названием Better REST API Featured Image. Он добавляет URL изображения записи к стандартному ответу REST API.

1 июл. 2016 г. 00:02:43
Комментарии

Спасибо. Возвращает URL, что удобно. Есть идеи, почему сам плагин его не возвращает? Я что-то делаю не так или это API?

Abdul Sadik Yalcin Abdul Sadik Yalcin
1 июл. 2016 г. 00:06:47

Это API. Ещё ранняя стадия. Будет улучшаться.

Michael Cropper Michael Cropper
1 июл. 2016 г. 00:08:17

Проблема решена! На самом деле возвращается ID изображения, но я совсем забыл, что у меня включён кеш! Но в любом случае, этот плагин лучше, так как возвращает URL напрямую.

Abdul Sadik Yalcin Abdul Sadik Yalcin
1 июл. 2016 г. 01:14:06

@Devrim Рад, что вы решили проблему! Если ответ Майкла вам помог, вы можете нажать галочку слева от него, чтобы принять его и показать другим, что это был правильный ответ. :)

Tim Malone Tim Malone
1 июл. 2016 г. 02:34:31
0

Я создал сокращение для своего изображения, добавив его напрямую в ответ API.


//Добавляем в functions.php, этот хук предназначен для моего типа записи '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,
      )
  );
}

//Используем ID записи для получения изображения и добавления его в ответ
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 сент. 2018 г. 01:16:49
0

Вставьте этот код в файл functions.php вашей темы и используйте ключ featured_image_url для изображения записи.

function post_featured_image_json( $data, $post, $context ) {
  $featured_image_id = $data->data['featured_media']; // получаем ID изображения записи
  $featured_image_url = wp_get_attachment_image_src( $featured_image_id, 'original' ); // получаем URL изображения в оригинальном размере

  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 мар. 2022 г. 18:25:17
0

Попробуйте следующий способ ....................

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

Изображение: json["_embedded"]["wp:featuredmedia"][0]["source_url"],

Это работает корректно. Попробуйте.

15 июл. 2020 г. 21:14:14
0

Я установил плагин Yoast SEO и обнаружил, что URL избранного изображения доступен там. После URL: /wp-json/wp/v2/posts?_embed

Вы можете найти избранное изображение в: yoast_head_json > robots > og_image > url

17 февр. 2022 г. 11:31:11
1
  1. Установите плагин Yoast SEO

  2. Получение данных из WordPress REST API в JavaScript

     async function fetchPosts() {
     const responce = await fetch('https://example.com/wp-json/wp/v2/posts');
     return responce.json();}
    
  3. Отображение 10 изображений в HTML (используется ID = posts в .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="Изображение поста" title="Изображение поста"></img>`;
         images += obj;
         document.getElementById('posts').innerHTML = `${images}`
     }})()
    
19 февр. 2022 г. 16:17:52
Комментарии

Возможно, объедините ваши два ответа? Похоже, они предлагают одно и то же решение.

Rup Rup
2 мар. 2022 г. 17:35:30