Я использую wp-rest api для получения информации о сообщениях. Я также использую элементы фильтра 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
}
]
Вопрос в том, как я могу сгенерировать URL рекомендуемого медиа, используя этот идентификатор? По умолчанию вызов 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"
}
]
}
}
Но рассмотрим случай, когда я хочу получить список постов и их миниатюры. Один раз мне нужно позвонить, 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 сообщениях (один для списка, 10 для миниатюр). Можно ли получить этот результат в одном запросе?
_embed
параметр, возвращаемый объект post будет содержать все сведения о выбранном мультимедиа и все доступные его размеры. Проверьте мой ответ для примера.Ответы:
Ах, у меня была эта проблема! И хотя
_embed
это здорово, по моему опыту, это очень медленно, и смысл JSON в том, чтобы быть быстрым: DУ меня есть следующий код в плагине (используется для добавления пользовательских типов записей), но я думаю, вы могли бы поместить его в
function.php
файл вашей темы .php
Теперь в вашем ответе JSON вы должны увидеть новое поле,
"featured_image_src":
содержащее ссылку на миниатюру.Подробнее об изменении ответов читайте здесь:
http://v2.wp-api.org/extending/modifying/
А вот еще информация о
register_rest_field
иwp_get_attachment_image_src()
функции:1.) https://developer.wordpress.org/reference/functions/register_rest_field/
2.) https://developer.wordpress.org/reference/functions/wp_get_attachment_image_src/
** Примечание: не забывайте
<?php ?>
теги, если это новый файл php!источник
($object['featured_media'], 'fullsize', false);
не давать мне URL-адрес миниатюры, но отлично работает через functions.php - Спасибо!http://mahditajik.ir/wp-json/wp/v2/media/<id>
но у него есть много дополнительных данных, которые замедляют ответ, так как я могу настроить REST api response dto?Просто добавьте
_embed
аргумент запроса к URL-адресу, запрашивающему сообщения, и каждый объект публикации будет включать_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
Я использую его на сайте с чем-то вроде этого (используйте свой собственный домен, конечно):
Увидеть? Нет необходимости в двух запросах, просто добавьте их
_embed
в качестве аргумента запроса, и тогда у вас будет вся информация, необходимая для использования наилучшего размера для вашего представления.источник