WP Rest API - Як отримати представлене зображення


24

Я дуже новачок у цьому 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);
      //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);
    }  
  });
}

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

популярні ЗМІ?

Будь-яка допомога буде вдячна.

Відповіді:


1

Погляньте на плагін під назвою Better REST API Featured Image . Він додає обраний URL-адресу зображення до оригінальної відповіді API.


Дякую. Повертає зручну URL-адресу. Будь-які ідеї, чому сам плагін не повертає його? Я щось роблю неправильно чи це API?
Абдул Садік Ялцін

1
Його API. Ще перші дні. Це покращиться
Майкл Кроппер

1
Проблема вирішена! Він насправді повертає ідентифікатор зображення, але я зовсім забув, що ввімкнув кеш! Але все одно, цей плагін краще, оскільки він повертає URL безпосередньо.
Абдул Садік Ялцін

@Devrim Радий, що ти це вирішив! Якщо ця відповідь Майкла допомогла вам, ви можете натиснути галочку зліва від неї, щоб прийняти її, щоб показати іншим, що це правильна відповідь. :)
Тім Малоун

61

Ви можете отримати його без плагінів, додавши _embedдо запиту як парам

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

це спричиняє проблему під час прив'язки до неї в кутовій прив'язці, виконайте wp:ім'я одного з вузлів на шляху json до зображення. Я використовував плагін з іншої відповіді, що спрощує шлях до зображення.
Стів

1
Мінуси: JSON отримує більш важкі плюси: не встановлюйте плагін, не дзвоніть на інший http-запит -> upvote
Tho Vo

1
Як слід конвертувати wp: featuredmedia в JSON? спочатку я створюю wp-клас, який містить Featuredmedia. Але це не працює.
Кенджі

2
Ви можете отримати доступ до wp: за допомогою цього позначення post._embedded ['wp: term']
ocajian

11

Я б НЕ використовував плагін API краще для відпочинку. Це додало обраних зображень до решти api, але це також порушило його.

Це найпростіше рішення, яке я зміг знайти, що насправді спрацювало. Додайте такий код у свою функцію.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

Ви можете отримати ім'я зображення за допомогою цього шляху:

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


1

Я зробив ярлик до свого зображення, додавши його безпосередньо у відповідь 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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.