API WP Rest - Comment obtenir l'image sélectionnée

24

Je suis très nouveau sur cette API, en fait, je n'y ai passé que quelques heures jusqu'à présent. J'ai fait mes recherches mais je n'y trouve rien ...

Le problème est que je n'arrive pas à obtenir l'image sélectionnée d'un article. Le JSON revient "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);
    }  
  });
}

J'ai définitivement mis une image en vedette sur le post, mais les données retournent:

médias en vedette?

Toute aide serait appréciée.

Abdul Sadik Yalcin
la source

Réponses:

1

Jetez un oeil à un plugin appelé Image vedette Better REST API . Il ajoute l'URL de l'image sélectionnée à la réponse API originale.

Michael Cropper
la source
Merci. Renvoie l'URL qui est pratique. Des idées pourquoi le plugin lui-même ne le retourne pas? Suis-je en train de faire quelque chose de mal ou est-ce l'API?
Abdul Sadik Yalcin
1
C'est l'API. Encore les premiers jours. Cela s'améliorera
Michael Cropper
1
Problème résolu! Il retourne en fait un ID de l'image mais j'ai totalement oublié que j'avais le cache activé! Mais de toute façon, ce plugin est meilleur car il renvoie directement l'url.
Abdul Sadik Yalcin
@Devrim Heureux que vous l'ayez résolu! Si cette réponse de Michael vous a aidé, vous pouvez cliquer sur la coche à gauche pour l'accepter pour montrer aux autres que c'était la bonne réponse. :)
Tim Malone
61

Vous pouvez l'obtenir sans plugins en ajoutant _embedcomme paramètre à votre requête

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
Eslam Mahmoud
la source
cela provoque un problème lors de la liaison à elle dans une liaison angulaire, faites au wp:nom de l'un des nœuds dans le chemin json de l'image. J'ai utilisé le plugin de l'autre réponse, ce qui simplifie le chemin vers l'image.
Steve
1
inconvénients: le JSON devient plus lourd: n'installez pas de plugin, n'appelez pas une autre requête http -> upvote
Tho Vo
1
Comment convertir wp: Featuredmedia en JSON? je crée d'abord la classe wp qui contient les médias en vedette. Mais ça ne marche pas.
Kenji
2
Vous pouvez accéder à wp: en utilisant cette notation post._embedded ['wp: term']
ocajian
11

Je n'utiliserais PAS le meilleur plugin API de repos. Il a ajouté des images en vedette à l'api restante, mais il l'a également cassé.

C'est la solution la plus simple que j'ai pu trouver et qui a réellement fonctionné. Ajoutez le code suivant à votre functions.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 );

?>
Null TX
la source
4

Vous pouvez obtenir le nom de l'image avec ce chemin:

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

RobK
la source
1

J'ai créé un raccourci vers mon image en l'ajoutant directement à la réponse de l'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
la source