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.

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.


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

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 );

?>

4

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

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


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;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.