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, но это также сломало его.

Это самое простое решение, которое мне удалось найти, которое действительно сработало. Добавьте следующий код в ваш 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

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

array_name._embedded [ 'сор: 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.