WP Rest API - Cara mendapatkan gambar unggulan

24

Saya sangat baru dengan API ini, sebenarnya saya hanya menghabiskan beberapa jam untuk itu sejauh ini. Saya sudah melakukan penelitian tetapi tidak dapat menemukan apa-apa tentang itu ...

Masalahnya adalah, sepertinya saya tidak bisa mendapatkan gambar unggulan dari sebuah posting. JSON kembali "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);
    }  
  });
}

Saya sudah pasti, menetapkan gambar unggulan pada posting tetapi data kembali:

media unggulan?

Bantuan apa pun akan dihargai.

Abdul Sadik Yalcin
sumber

Jawaban:

1

Lihatlah sebuah plugin bernama Better REST API Featured Image . Itu menambahkan URL gambar unggulan ke respons API asli.

Michael Cropper
sumber
Terima kasih. Mengembalikan URL yang berguna. Adakah ide mengapa plugin itu sendiri tidak mengembalikannya? Apakah saya melakukan sesuatu yang salah atau apakah itu API?
Abdul Sadik Yalcin
1
Ini adalah API. Masih dini. Itu akan meningkat
Michael Cropper
1
Masalah terpecahkan! Ini benar-benar mengembalikan ID gambar tetapi saya benar-benar lupa saya menghidupkan cache! Tapi bagaimanapun, plugin itu lebih baik karena langsung mengembalikan url.
Abdul Sadik Yalcin
@ Evrim Senang Anda menyelesaikannya! Jika jawaban dari Michael ini membantu Anda, Anda dapat mengklik tanda centang di sebelah kiri untuk menerimanya untuk menunjukkan kepada orang lain bahwa ini adalah jawaban yang benar. :)
Tim Malone
61

Anda bisa mendapatkannya tanpa plugin dengan menambahkan _embedsebagai param ke kueri Anda

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
Eslam Mahmoud
sumber
ini menyebabkan masalah ketika mengikatnya dalam Angular binding, lakukan untuk wp:nama salah satu node di json path ke gambar. Saya menggunakan plugin dari jawaban lain, yang menyederhanakan jalur ke gambar.
Steve
1
kontra: JSON mendapatkan pro lebih berat: tidak menginstal plugin, tidak memanggil permintaan http lain -> upvote
Tho Vo
1
Bagaimana seharusnya mengkonversi wp: Featuredmedia ke JSON? pertama-tama saya membuat kelas wp yang berisi media unggulan. Tapi itu tidak berhasil.
Kenji
2
Anda dapat mengakses wp: dengan menggunakan notasi ini post._embedded ['wp: term']
ocajian
11

Saya TIDAK akan menggunakan plugin API sisanya yang lebih baik. Itu memang menambahkan gambar fitur ke api sisanya tetapi juga memecahkannya.

Ini adalah solusi paling sederhana yang saya dapat temukan yang benar-benar berfungsi. Tambahkan kode berikut ke functions.php Anda:

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

Anda bisa mendapatkan nama gambar dengan jalur ini:

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

Robk
sumber
1

Saya membuat pintasan ke gambar saya dengan menambahkannya langsung ke respons 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
sumber