WP API 和 JS:无法读取未定义的 属性 'wp:featuredmedia'
WP API and JS : Cannot read property 'wp:featuredmedia' of undefined
我编写了一个组件来在使用 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: Cannot read property '0' of undefined
server-bundle.js:1525 filtered.data.data.map.item
server-bundle.js:1525:56
Array.map
server-bundle.js:1519 >__WEBPACK_IMPORTED_MODULE_1_axios___default.a.get.then .response
server-bundle.js:1519:24
next_tick.js:160 process._tickCallback
internal/process/next_tick.js:160:7
那么为什么 item._embedded 是未定义的?
item.id 或 item.slug 没有问题...任何澄清表示赞赏。
最后,我没有使用“_embed”,但我在这个答案之后添加了一个新端点:Get Image URL instead of Attachment Id in Rest API
我认为请求 url 不正确,您应该使用 _embed 而不是 _embedded
所以它将是 request.get(
posts?categories=46&per_page=6&_embed)
否则,json 响应中将缺少 _embedded 部分。
问题是有时 item._embedded['wp:featuredmedia']
返回 undefined
,你可以通过 console.log(item._embedded['wp:featuredmedia'])
确认你得到了它,解决方案是将它包装在 if 条件中,如果它不是 undefined继续 if(item._embedded['wp:featuredmedia']){ return let imageUrl = item._embedded["wp:featuredmedia"][0].media_details.sizes.full.source_url
} else { return null}
我有一个 post 出现了这个错误。我已经正确设置了 if/else 但它仍然出错。我解决了问题 post 并重新保存了特色图片,还更改为 ajax 以加载 .full.source_url 而不是 .medium.source_url 并修复了错误。
我从另一个wordpress导入了一些照片。他们中的一些人没有特色图片,但他们以某种方式表现得像他们一样。 (has_post_thumbnail() 以同样的方式行事并且 returns 对于该帖子是正确的)
我的解决方案是检查它们 'really' 是否有缩略图:
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;
}
我编写了一个组件来在使用 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: Cannot read property '0' of undefined
server-bundle.js:1525 filtered.data.data.map.item server-bundle.js:1525:56
Array.map
server-bundle.js:1519 >__WEBPACK_IMPORTED_MODULE_1_axios___default.a.get.then .response server-bundle.js:1519:24
next_tick.js:160 process._tickCallback internal/process/next_tick.js:160:7
那么为什么 item._embedded 是未定义的? item.id 或 item.slug 没有问题...任何澄清表示赞赏。
最后,我没有使用“_embed”,但我在这个答案之后添加了一个新端点:Get Image URL instead of Attachment Id in Rest API
我认为请求 url 不正确,您应该使用 _embed 而不是 _embedded
所以它将是 request.get(
posts?categories=46&per_page=6&_embed)
否则,json 响应中将缺少 _embedded 部分。
问题是有时 item._embedded['wp:featuredmedia']
返回 undefined
,你可以通过 console.log(item._embedded['wp:featuredmedia'])
确认你得到了它,解决方案是将它包装在 if 条件中,如果它不是 undefined继续 if(item._embedded['wp:featuredmedia']){ return let imageUrl = item._embedded["wp:featuredmedia"][0].media_details.sizes.full.source_url
} else { return null}
我有一个 post 出现了这个错误。我已经正确设置了 if/else 但它仍然出错。我解决了问题 post 并重新保存了特色图片,还更改为 ajax 以加载 .full.source_url 而不是 .medium.source_url 并修复了错误。
我从另一个wordpress导入了一些照片。他们中的一些人没有特色图片,但他们以某种方式表现得像他们一样。 (has_post_thumbnail() 以同样的方式行事并且 returns 对于该帖子是正确的)
我的解决方案是检查它们 'really' 是否有缩略图:
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;
}