我还使用wp rest api过滤器项来过滤字段并汇总结果:
当我调用
http://example.com/wp-json/wp/v2/posts?items=id,title,featured_media
时,它会返回这样的结果:[
{
"id": 407,
"title": {
"rendered": "Title 1"
},
"featured_media": 399
},
{
"id": 403,
"title": {
"rendered": "Title 2"
},
"featured_media": 401
}
]
问题是如何使用该ID生成特色媒体网址?默认情况下,调用
http://example.com/wp-json/wp/v2/media/401
返回一个新的json,其中包含有关不同大小的源图像的url的所有详细信息:{
"id": 401,
"date": "2016-06-03T17:29:09",
"date_gmt": "2016-06-03T17:29:09",
"guid": {
"rendered": "http://example.com/wp-content/uploads/my-image-name.png"
},
"modified": "2016-06-03T17:29:09",
"modified_gmt": "2016-06-03T17:29:09",
"slug": "my-image-name",
"type": "attachment",
"link": "http://example.com/my-post-url",
"title": {
"rendered": "my-image-name"
},
"author": 1,
"comment_status": "open",
"ping_status": "closed",
"alt_text": "",
"caption": "",
"description": "",
"media_type": "image",
"mime_type": "image/png",
"media_details": {
"width": 550,
"height": 250,
"file": "my-image-name.png",
"sizes": {
"thumbnail": {
"file": "my-image-name-150x150.png",
"width": 150,
"height": 150,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name-150x150.png"
},
"medium": {
"file": "my-image-name-300x136.png",
"width": 300,
"height": 136,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name-300x136.png"
},
"one-paze-port-thumb": {
"file": "my-image-name-363x250.png",
"width": 363,
"height": 250,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name-363x250.png"
},
"one-paze-blog-thumb": {
"file": "my-image-name-270x127.png",
"width": 270,
"height": 127,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name-270x127.png"
},
"one-paze-team-thumb": {
"file": "my-image-name-175x175.png",
"width": 175,
"height": 175,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name-175x175.png"
},
"one-paze-testimonial-thumb": {
"file": "my-image-name-79x79.png",
"width": 79,
"height": 79,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name-79x79.png"
},
"one-paze-blog-medium-image": {
"file": "my-image-name-380x250.png",
"width": 380,
"height": 250,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name-380x250.png"
},
"full": {
"file": "my-image-name.png",
"width": 550,
"height": 250,
"mime_type": "image/png",
"source_url": "http://example.com/wp-content/uploads/my-image-name.png"
}
},
"image_meta": {
"aperture": "0",
"credit": "",
"camera": "",
"caption": "",
"created_timestamp": "0",
"copyright": "",
"focal_length": "0",
"iso": "0",
"shutter_speed": "0",
"title": "",
"orientation": "0",
"keywords": [ ]
}
},
"post": 284,
"source_url": "http://example.com/wp-content/uploads/my-image-name.png",
"_links": {
"self": [
{
"href": "http://example.com/wp-json/wp/v2/media/401"
}
],
"collection": [
{
"href": "http://example.com/wp-json/wp/v2/media"
}
],
"about": [
{
"href": "http://example.com/wp-json/wp/v2/types/attachment"
}
],
"author": [
{
"embeddable": true,
"href": "http://example.com/wp-json/wp/v2/users/1"
}
],
"replies": [
{
"embeddable": true,
"href": "http://example.com/wp-json/wp/v2/comments?post=401"
}
]
}
}
但是当我想获取帖子列表时请考虑这种情况及其缩略图。一次,我应该为每个媒体ID调用
http://example.com/wp-json/wp/v2/posts?items=id,title,featured_media
,然后我应该呼叫http://example.com/wp-json/wp/v2/media/id
10次,然后解析结果并获得媒体缩略图的最终URL。因此,需要11个请求才能获取10个帖子的详细信息(一个用于列表,十个用于缩略图)。是否可以在一个请求中获得此结果?
#1 楼
啊,我自己就是这个问题!尽管_embed
很棒,但以我的经验来看,它非常慢,并且JSON的含义是要快:D 我在插件中有以下代码(用于添加自定义帖子类型),但我想您可以将其放在主题的
function.php
文件中。php
add_action( 'rest_api_init', 'add_thumbnail_to_JSON' );
function add_thumbnail_to_JSON() {
//Add featured image
register_rest_field(
'post', // Where to add the field (Here, blog posts. Could be an array)
'featured_image_src', // Name of new field (You can call this anything)
array(
'get_callback' => 'get_image_src',
'update_callback' => null,
'schema' => null,
)
);
}
function get_image_src( $object, $field_name, $request ) {
$feat_img_array = wp_get_attachment_image_src(
$object['featured_media'], // Image attachment ID
'thumbnail', // Size. Ex. "thumbnail", "large", "full", etc..
true // Whether the image should be treated as an icon.
);
return $feat_img_array[0];
}
现在在JSON响应中,您应该看到一个新字段
在此处了解有关修改响应的更多信息:http://v2.wp-api.org/extending/modifying/
这是有关
"featured_image_src":
和register_rest_field
函数的更多信息:1.)https://developer.wordpress.org/reference/functions/register_rest_field/
2.)https://developer.wordpress.org/reference / functions / wp_get_attachment_image_src /
**注意:如果这是一个新的php文件,请不要忘记
wp_get_attachment_image_src()
标签!评论
这很好用,并帮助不需要使用_embed,因为我只想要全尺寸的特色图像。我确实必须将其更改为:($ object ['featured_media'],'fullsize',false);不给我缩略图网址,而是通过functions.php完美地工作-谢谢!
–乔丹
17-12-04 at 0:41
所有与RES API端点的争执都使我想起为什么我喜欢GraphQL,并且我应该完成REST API和新的自定义解析器的包装;-)无论如何,这是一个聪明的解决方案,实际上我在生产中使用自定义端点来获取数据我需要(仅此)。
–耶苏斯·佛朗哥(JesúsFranco)
17/12/4在16:20
新插件具有http://mahditajik.ir/wp-json/wp/v2/media/
–马赫迪
18年4月11日在15:19
非常感谢,它帮助我完成了特色内容功能! :D
– Atem18
18年6月27日在17:17
我只是想让您知道,这使我的加载时间减少了2秒!非常感谢您和精心策划的书目!
– GuiHarrison
19年2月12日在19:53
#2 楼
只需将_embed
查询参数添加到查询帖子的URL中,每个post对象将包括_embedded.[wp:featuredmedia]
对象,该对象包含所有图像,就像/media/$id
资源一样。如果您想要一个特定的大小,只需通过其属性名称即可访问它,即:_embedded[wp:featuredmedia][0].media_details.sizes.full.source_url
或其缩略图:_embedded[wp:featuredmedia][0].media_details.sizes.thumbnail.source_url
即wp:featuredmedia嵌入式对象包含所有URL和每种大小的详细信息可用于您的帖子,但如果您只想要原始的特色图片,则可以使用以下项中的值:
post._embedded["wp:featuredmedia"][0].source_url
我在具有此类内容的网站中使用它(使用您自己的域,课程):
$.get('https://example.com/wp-json/wp/v2/posts/?categories=3&_embed',
function(posts) {
var elems = '';
posts.forEach(function(post){
var link = post.link;
var title = post.title.rendered;
var pic = post._embedded["wp:featuredmedia"][0].source_url);
elems += '<div class="this_week"><a href="' + link + '" target="_blank">';
elems += '<img src="' + pic + '" title="' + title + '"/><span class="title">';
elems += title + '</span></a></div>';
});
$('#blockbusters').html(elems);
});
});
看到了吗?无需两个查询,只需将
_embed
添加为查询参数,即可获得所需的所有信息,以便为视图使用最佳大小。#3 楼
在网址中添加&_embed会将wp:featuremedia添加到JSON,即使您有自定义帖子,
示例
https://example.com/wp-json/wp/v2/posts?search=Sometitlepost&_embed&order=asc
评论
您是否使用register_rest_field注册了用于响应的新字段?@Benoti我将检查其文档。如果还有其他事情要问,我会回来给你:)
没错,您在发布请求中没有图像日期,只需使用特色媒体的ID,并且在WP API的默认设置下就需要一个新请求。
如果添加_embed参数,则返回的post对象将包含有关精选媒体及其所有可用大小的所有详细信息。查看我的回复以获取示例。