WP Rest API - วิธีรับภาพเด่น


24

ฉันใหม่มากสำหรับ API นี้อันที่จริงฉันใช้เวลาเพียงไม่กี่ชั่วโมง ฉันทำวิจัยแล้ว แต่ไม่พบอะไรเลย ...

ปัญหาคือฉันไม่สามารถรับภาพเด่นของโพสต์ได้ "featured_media: 0"ผลตอบแทนที่ได้ JSON

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

ลองดูที่ปลั๊กอินที่เรียกว่าดีกว่า REST API ของโรงแรม มันเพิ่ม URL รูปภาพที่โดดเด่นให้กับการตอบสนอง API ดั้งเดิม


ขอขอบคุณ. ส่งคืน URL ซึ่งมีประโยชน์ ความคิดใดที่ว่าทำไมปลั๊กอินนั้นถึงไม่กลับมา? ฉันกำลังทำสิ่งผิดปกติหรือเป็น API หรือไม่
Abdul Sadik Yalcin

1
มันเป็น API ยังคงวันแรก จะดีขึ้น
Michael Cropper

1
แก้ไขปัญหา! มันจะคืนค่า ID ของภาพ แต่ฉันลืมไปเลยว่าฉันเปิดแคชไว้! แต่อย่างไรก็ตามปลั๊กอินนั้นดีกว่าเพราะส่งคืน URL โดยตรง
Abdul Sadik Yalcin

@Devrim ดีใจที่คุณแก้ไขมัน! หากคำตอบนี้จาก Michael ช่วยคุณคุณสามารถคลิกที่เครื่องหมายทางด้านซ้ายเพื่อตอบรับเพื่อแสดงให้คนอื่นเห็นว่านี่เป็นคำตอบที่ถูกต้อง :)
Tim Malone

61

คุณสามารถรับได้โดยไม่มีปลั๊กอินโดยเพิ่ม_embedเป็นพารามิเตอร์ของแบบสอบถามของคุณ

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

สิ่งนี้ทำให้เกิดปัญหาเมื่อรวมเข้าด้วยกันในการเชื่อม Angular ทำกับwp:ชื่อของโหนดใดโหนดหนึ่งในพา ธ json ไปยังรูปภาพ ฉันใช้ปลั๊กอินจากคำตอบอื่นซึ่งทำให้พา ธ ไปยังรูปภาพง่ายขึ้น
Steve

1
ข้อเสีย: JSON รับข้อดีที่หนักกว่า: ไม่ได้ติดตั้งปลั๊กอินไม่เรียกคำขอ http อื่น -> upvote
Tho Vo

1
ควรแปลง wp: featuredmedia เป็น JSON อย่างไร ก่อนอื่นฉันจะสร้างคลาส wp ที่มีวิดีโอเด่น แต่มันไม่ทำงาน
Kenji

2
คุณสามารถเข้าถึง wp: โดยใช้สัญลักษณ์นี้ post._embedded ['wp: term']
ocajian

11

ฉันจะไม่ใช้ปลั๊กอิน API ส่วนที่เหลือที่ดีกว่า มันเพิ่มรูปภาพที่โดดเด่นให้กับ api ที่เหลือ แต่มันก็ทำให้แตกด้วย

นี่เป็นทางออกที่ง่ายที่สุดที่ฉันพบว่าใช้งานได้จริง เพิ่มรหัสต่อไปนี้ของคุณ function.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 [ 'WP: 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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.