WP Rest API - So erhalten Sie ein vorgestellten Bild

24

Ich bin sehr neu in dieser API, tatsächlich habe ich bisher nur ein paar Stunden damit verbracht. Ich habe meine Recherchen durchgeführt, kann aber nichts dazu finden ...

Das Problem ist, ich kann nicht scheinen, das gekennzeichnete Bild eines Pfostens zu erhalten. Der JSON kehrt zurück "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);
    }  
  });
}

Ich habe definitiv ein ausgewähltes Bild für den Beitrag eingestellt, aber die Daten werden zurückgegeben:

Empfohlene Medien?

Jede Hilfe wird geschätzt.

Abdul Sadik Yalcin
quelle

Antworten:

1

Schauen Sie sich ein Plugin namens Better REST API Featured Image an . Die URL des vorgestellten Bilds wird zur ursprünglichen API-Antwort hinzugefügt.

Michael Cropper
quelle
Vielen Dank. Gibt die URL zurück, die nützlich ist. Irgendwelche Ideen, warum das Plugin es selbst nicht zurückgibt? Mache ich etwas falsch oder ist es die API?
Abdul Sadik Yalcin
1
Es ist die API. Noch frühe Tage. Es wird sich verbessern
Michael Cropper
1
Problem gelöst! Es gibt tatsächlich eine ID des Bildes zurück, aber ich habe völlig vergessen, dass ich den Cache aktiviert hatte! Das Plugin ist jedoch besser, da es die URL direkt zurückgibt.
Abdul Sadik Yalcin
@ Devrim Froh, dass du es gelöst hast! Wenn diese Antwort von Michael Ihnen geholfen hat, können Sie auf das Häkchen links davon klicken, um sie zu akzeptieren und anderen zu zeigen, dass dies die richtige Antwort war. :)
Tim Malone
61

Sie können es ohne Plugins erhalten, indem Sie _embedals Parameter zu Ihrer Abfrage hinzufügen

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
Eslam Mahmoud
quelle
Dies führt zu einem Problem beim Binden in einer Angular-Bindung an den wp:Namen eines der Knoten im JSON-Pfad zum Bild. Ich habe das Plugin aus der anderen Antwort verwendet, was den Pfad zum Bild vereinfacht.
Steve
1
Nachteile: die JSON bekommen schwerere Vorteile: Plugin nicht installieren, keine weitere http-Anfrage aufrufen -> upvote
Tho Vo
1
Wie soll wp: featuredmedia in JSON konvertiert werden? zuerst erstelle ich eine wp-klasse, die featuredmedia enthält. Aber es funktioniert nicht.
Kenji
2
Sie können auf wp: zugreifen, indem Sie diesen Notationspost verwenden._embedded ['wp: term']
ocajian
11

Ich würde NICHT das bessere Rest-API-Plugin verwenden. Es hat dem Rest der API vorgestellte Bilder hinzugefügt, aber es hat es auch zerstört.

Dies ist die einfachste Lösung, die ich finden konnte und die tatsächlich funktioniert hat. Füge den folgenden Code zu deiner functions.php hinzu:

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

Sie können den Namen des Bildes mit diesem Pfad erhalten:

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

RobK
quelle
1

Ich habe eine Verknüpfung zu meinem Bild erstellt, indem ich sie direkt zur API-Antwort hinzugefügt habe.


//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
quelle