WP Rest API - Özellikli resim nasıl elde edilir


24

Bu API için çok yeniyim, aslında sadece birkaç saat harcadım. Araştırmamı yaptım ama bu konuda hiçbir şey bulamadım ...

Sorun şu ki, bir yayının öne çıkan görüntüsünü elde edemiyorum. JSON döner "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);
    }  
  });
}

Kesinlikle yazı üzerine bir özellik belirledim ancak veriler geri dönüyor:

özellikli medya?

Herhangi bir yardım takdir edilecektir.

Yanıtlar:


1

Better REST API Featured Image adlı bir eklentiye göz atın . Öne çıkan resim URL'sini orijinal API yanıtına ekler.


Teşekkür ederim. Kullanışlı olan URL'yi döndürür. Kendisini eklentinin neden geri vermediğine dair bir fikrin var mı? Yanlış bir şey mi yapıyorum yoksa API mi?
Abdul Sadik Yalçın

1
API. Hala erken günler. Bu artıracak
Michael Cropper

1
Sorun çözüldü! Aslında görüntünün bir kimliği döndürür ama önbelleği açtım tamamen unuttum! Ancak yine de, bu eklenti doğrudan URL'yi döndürdüğü için daha iyidir.
Abdul Sadik Yalçın,

@Devrim Çözdüğünüze sevindim! Michael'ın bu cevabı size yardımcı olduysa, başkalarına bunun doğru cevap olduğunu göstermek için solundaki onay işaretini tıklayabilirsiniz. :)
Tim Malone

61

_embedSorgunuza param olarak ekleyerek eklentileri olmadan alabilirsiniz

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

bu, açısal bir bağda bağlandığında wp:görüntüye giden json yolundaki düğümlerden birinin adını yapar. Eklentiyi diğer cevaptan kullandım, ki bu da görüntünün yolunu basitleştiriyor.
Steve

1
eksilerini: JSON ağır artılarını almak: eklenti yükleme, başka bir http isteği çağırmak -> yükseltme
Tho Vo

1
Wp: featuredmedia'ı JSON'a nasıl dönüştürebilirim? ilk önce feaimediamedia içeren wp sınıfı oluşturdum. Ama bu çalışmıyor.
Kenji

2
Wp: 'a bu posttation'ı kullanarak post._embedded [' wp: term ']
ocajian

11

Daha iyi dinlenme API eklentisi kullanmazdım. Kalan apilere özellikli görüntüler ekledi, ancak kırdı.

Bu gerçekten işe yaradığını bulabildiğim en basit çözüm. Functions.php dosyasına şu kodu ekleyin:

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

Bu yolla görüntünün adını alabilirsiniz:

array_name._embedded [ 'WP: featuredmedia']. [ '0'] SOURCE_URL


1

Resme doğrudan API yanıtına ekleyerek bir kısayol yaptım.


//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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.