WP API和JS:无法读取属性&#; wp:featuredmedia'未定义的

时间:2018-02-21 22:18:10

标签: wordpress wp-api

我编写了一个组件,用nuxt.js在页面构建上显示列表WP帖子,我无法显示特色图片。

Vue组件

<template>
  <div class="references__grid">
    <div class="references__item" v-for="item in references">
        <h3><nuxt-link :to="slugToUrl(item.slug)"><h2 class="is-title">{{ item.title }}</h2></nuxt-link></h3>
        <div v-html="item.excerpt"></div>
        <div>{{ item.image }}</div>
        <strong class="more"><nuxt-link :to="slugToUrl(item.slug)">Lire la suite</nuxt-link></strong>
    </div>
  </div>
</template>

请求

  getReferences() {
    return new Promise((resolve, reject) => {
      request.defaults.baseURL = this.baseUrl;
      request.get(`posts?categories=46&per_page=6&_embedded`).then(response => {
        const data = [...response.data];
        if (response.status === 200 && response.data.length > 0) {
          const filtered = {
            total: response.headers["x-wp-total"],
            totalPages: response.headers["x-wp-totalpages"],
            data: data.map(item => ({
              id: item.id,
              title: item.title.rendered,
              content: item.content.rendered,
              excerpt: item.excerpt.rendered,
              slug: item.slug,
              image: item._embedded["wp:featuredmedia"][0].media_details.sizes.full.source_url
            }))
          };
          resolve(filtered);
        } else {
          reject(response);
        }
      });
    });
  },

WP Api似乎没问题:https://www.agencedebord.com/wp-json/wp/v2/posts?categories=46&per_page=61&_embed

错误消息:

  

ERROR

     

TypeError:无法读取属性&#39; 0&#39;未定义的

     
      
  • server-bundle.js:1525 filtered.data.data.map.item   服务器bundle.js:1525:56

  •   
  • Array.map

  •   
  • server-bundle.js:1519&gt; __ WEBPACK_IMPORTED_MODULE_1_axios ___ default.a.get.then .response   服务器bundle.js:1519:24

  •   
  • next_tick.js:160 process._tickCallback   内部/过程/ next_tick.js:160:7

  •   

为什么item._embedded未定义? item.id或item.slug没有问题......任何澄清都表示赞赏。

5 个答案:

答案 0 :(得分:0)

最后,我没有使用&#34; _embed&#34;但我在这个答案之后添加了一个新的终点:Get Image URL instead of Attachment Id in Rest API

答案 1 :(得分:0)

我认为请求网址不正确,应该使用_embed而不是_embedded

因此它将是request.get(个帖子?categories = 46&per_page = 6&_embed )

否则,json响应中将缺少_embedded部分。

答案 2 :(得分:0)

问题有时是item._embedded['wp:featuredmedia']返回undefined,您可以通过console.log(item._embedded['wp:featuredmedia'])确认是否可以解决此问题,方法是将其包装在if条件中(如果未定义继续) if(item._embedded['wp:featuredmedia']){ return let imageUrl = item._embedded["wp:featuredmedia"][0].media_details.sizes.full.source_url } else { return null}

答案 3 :(得分:0)

我有一篇帖子给出了此错误。我正确地设置了if / else,但是仍然出错。我去了问题文章并重新修复了特色图片,还更改为ajax来加载.full.source_url而不是.medium.source_url,从而修复了错误。

答案 4 :(得分:0)

我从另一个wordpress导入了一些照片。其中一些没有特色图片,但以某种方式表现得像。 (has_post_thumbnail()的行为相同,并针对该帖子返回true)

我的解决方案是检查他们是否“真的”拥有缩略图:

if(post.featured_media == 0 || post._embedded['wp:featuredmedia'][0].media_details == undefined){
    imageSource = null;
}
else{
    imageSource = post._embedded['wp:featuredmedia'][0].media_details.sizes.full.source_url;
}