WP Rest API - Cách lấy hình ảnh nổi bật


24

Tôi rất mới với API này, thực tế là tôi mới chỉ dành vài giờ cho nó. Tôi đã thực hiện nghiên cứu của mình nhưng không thể tìm thấy bất cứ điều gì về nó ...

Vấn đề là, tôi dường như không thể có được hình ảnh đặc trưng của một bài đăng. JSON trả về "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);
    }  
  });
}

Tôi chắc chắn, đã đặt một hình ảnh nổi bật trên bài đăng nhưng dữ liệu trả về:

phương tiện truyền thông nổi bật?

Bất kỳ trợ giúp sẽ được đánh giá cao.

Câu trả lời:


1

Hãy xem một plugin có tên Better REST API Image Image . Nó thêm URL hình ảnh đặc trưng vào phản hồi API gốc.


Cảm ơn bạn. Trả về URL tiện dụng. Bất kỳ ý tưởng tại sao các plugin tự nó không trả lại nó? Tôi đang làm gì đó sai hay là API?
Abdul Sadik Yalcin

1
Đó là API. Vẫn còn sớm. Nó sẽ được cải thiện
Michael Cropper

1
Vấn đề được giải quyết! Nó thực sự trả về ID của hình ảnh nhưng tôi hoàn toàn quên rằng tôi đã bật bộ đệm! Nhưng dù sao, plugin đó vẫn tốt hơn vì nó trả về url trực tiếp.
Abdul Sadik Yalcin

@Devrim Rất vui vì bạn đã giải quyết nó! Nếu câu trả lời này của Michael đã giúp bạn, bạn có thể nhấp vào đánh dấu bên trái của nó để chấp nhận nó để cho người khác thấy rằng đây là câu trả lời đúng. :)
Tim Malone

61

Bạn có thể lấy nó mà không cần plugin bằng cách thêm _embeddưới dạng param vào truy vấn của bạn

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

điều này gây ra vấn đề khi liên kết với nó trong liên kết góc, làm với wp:tên của một trong các nút trong đường dẫn json đến hình ảnh. Tôi đã sử dụng plugin từ câu trả lời khác, giúp đơn giản hóa đường dẫn đến hình ảnh.
Steve

1
Nhược điểm: JSON nhận được nhiều ưu điểm hơn: không cài đặt plugin, không gọi một yêu cầu http khác -> upvote
Tho Vo

1
Làm thế nào để chuyển đổi wp: nổi bật thành JSON? đầu tiên tôi tạo lớp wp có đặc trưng. Nhưng nó không hoạt động.
Kenji

2
Bạn có thể truy cập wp: bằng cách sử dụng bài đăng ký hiệu này._embedded ['wp: term']
ocajian

11

Tôi sẽ KHÔNG sử dụng plugin API còn lại tốt hơn. Nó đã thêm hình ảnh đặc trưng cho api còn lại nhưng nó cũng phá vỡ nó.

Đây là giải pháp đơn giản nhất tôi có thể tìm thấy mà thực sự hiệu quả. Thêm mã sau vào hàm.php của bạn:

<?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

Bạn có thể lấy tên của hình ảnh với đường dẫn này:

mảng_name._embedded ['wp: Featuremedia'] ['0']. source_url


1

Tôi đã tạo một lối tắt cho hình ảnh của mình bằng cách thêm nó trực tiếp vào phản hồi 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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.