API WP Rest - Como obter uma imagem em destaque

24

Sou muito novo nessa API, na verdade, passei apenas duas horas nela até agora. Eu fiz minha pesquisa, mas não consigo encontrar nada sobre isso ...

O problema é que não consigo obter a imagem em destaque de uma postagem. O JSON retorna "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);
    }  
  });
}

Definitivamente, defina uma imagem em destaque na postagem, mas os dados retornam:

mídia em destaque?

Qualquer ajuda será apreciada.

Abdul Sadik Yalcin
fonte

Respostas:

1

Dê uma olhada em um plugin chamado Better REST API Featured Image . Ele adiciona o URL da imagem em destaque à resposta da API original.

Michael Cropper
fonte
Obrigado. Retorna o URL que é útil. Alguma idéia de por que o plugin não está retornando? Estou fazendo algo errado ou é a API?
Abdul Sadik Yalcin
1
É a API. Ainda cedo. Vai melhorar
Michael Cropper
1
Problema resolvido! Na verdade, ele retorna um ID da imagem, mas eu esqueci totalmente que o cache estava ativado! De qualquer forma, esse plug-in é melhor, pois retorna o URL diretamente.
Abdul Sadik Yalcin
@Devrim Fico feliz que você resolveu! Se esta resposta de Michael o ajudou, você pode clicar no visto à esquerda para aceitá-lo e mostrar aos outros que esta foi a resposta correta. :)
Tim Malone
61

Você pode obtê-lo sem plug-ins adicionando _embedcomo parâmetro à sua consulta

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed
Eslam Mahmoud
fonte
isso causa um problema ao vincular a ele em uma ligação Angular, faça com o wp:nome de um dos nós no caminho json da imagem. Eu usei o plugin da outra resposta, que simplifica o caminho para a imagem.
Steve Steve
1
contras: o JSON fica mais pesado: não instala plug-in, não chama outra solicitação http -> upvote
Tho Vo
1
Como converter wp: featuredmedia para JSON? primeiro eu crio a classe wp que contém featuredmedia. Mas não funciona.
Kenji
2
Você pode acessar o wp: usando esta notação post._embedded ['wp: term']
ocajian
11

Eu não usaria o melhor plugin da API de descanso. Ele adicionou imagens em destaque à API restante, mas também a quebrou.

Esta é a solução mais simples que consegui descobrir que realmente funcionava. Adicione o seguinte código ao seu 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 );

?>
TX nulo
fonte
4

Você pode obter o nome da imagem com este caminho:

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

RobK
fonte
1

Fiz um atalho para minha imagem adicionando-o diretamente à resposta da 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
fonte