WP Rest API - jak zdobyć wyróżniony obraz

24

Jestem bardzo nowy w tym interfejsie API, w rzeczywistości do tej pory spędziłem na nim tylko kilka godzin. Przeprowadziłem badania, ale nie mogę nic na ten temat znaleźć ...

Problem polega na tym, że nie mogę uzyskać wyróżnionego obrazu postu. JSON powraca "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);
    }  
  });
}

Zdecydowanie ustawiłem wyróżniony obraz w poście, ale dane zwracają:

polecane media?

Każda pomoc będzie mile widziana.

Abdul Sadik Yalcin
źródło

Odpowiedzi:

1

Spójrz na wtyczkę o nazwie Obraz polecany Better REST API . Dodaje URL wyróżnionego obrazu do oryginalnej odpowiedzi API.

Michael Cropper
źródło
Dziękuję Ci. Zwraca przydatny adres URL. Jakieś pomysły, dlaczego sama wtyczka go nie zwraca? Czy robię coś źle, czy jest to interfejs API?
Abdul Sadik Yalcin
1
To jest API. Nadal wczesne dni. Poprawi się
Michael Cropper
1
Problem rozwiązany! W rzeczywistości zwraca identyfikator obrazu, ale zupełnie zapomniałem, że mam włączoną pamięć podręczną! Ale w każdym razie ta wtyczka jest lepsza, ponieważ zwraca adres URL bezpośrednio.
Abdul Sadik Yalcin
@Devrim Cieszę się, że to rozwiązałeś! Jeśli ta odpowiedź od Michaela pomogła ci, możesz kliknąć znacznik po lewej stronie, aby zaakceptować, aby pokazać innym, że to była poprawna odpowiedź. :)
Tim Malone
61

Możesz go uzyskać bez wtyczek, dodając _embedjako parametr do zapytania

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
Eslam Mahmoud
źródło
powoduje to problem podczas wiązania z nim w powiązaniu kątowym, zrób wp:nazwę jednego z węzłów ścieżki json do obrazu. Użyłem wtyczki z innej odpowiedzi, co upraszcza ścieżkę do obrazu.
Steve,
1
Wady: JSON dostaje cięższe zalety: nie instaluj wtyczki, nie wywołuj kolejnego żądania http -> głosuj
Tho Vo
1
Jak przekonwertować wp: featuredmedia do JSON? najpierw tworzę klasę wp, która zawiera featuredmedia. Ale to nie działa.
Kenji,
2
Możesz uzyskać dostęp do wp: używając tego zapisu post._embedded ['wp: term']
ocajian
11

NIE użyłbym lepszej wtyczki API odpoczynku. Dodał wyróżnione obrazy do reszty interfejsu API, ale również go zepsuł.

To najprostsze rozwiązanie, jakie udało mi się znaleźć, które faktycznie zadziałało. Dodaj następujący kod do swojego 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 );

?>
Null TX
źródło
4

Nazwę obrazu możesz uzyskać za pomocą tej ścieżki:

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

RobK
źródło
1

Zrobiłem skrót do mojego obrazu, dodając go bezpośrednio do odpowiedzi 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;
}
Vars
źródło