Вопрос или проблема
Когда я делаю запрос к http://localhost/wordpress/wp-json/wp/v2/posts/?_embed&categories=${categoryId}&per_page=${state.perPage}
Я получаю следующий результат
[
{
id: 3,
date: '2019-04-20T16:10:00',
date_gmt: '2019-04-20T16:10:00',
guid: {
rendered: 'http://localhost/wordpress/?p=3'
},
modified: '2019-04-20T16:36:30',
modified_gmt: '2019-04-20T16:36:30',
slug: 'slug-title',
status: 'publish',
type: 'post',
link: 'http://localhost/wordpress/2019/04/20/slug-title/',
title: {
rendered: 'title'
},
content: {
rendered: '\n<figure class="wp-block-image"><img ' +
'src="http://localhost/wordpress/wp-content/uploads/2019/04/sirius.jpg" ' +
'alt="" class="wp-image-4" ' +
'srcset="http://localhost/wordpress/wp-content/uploads/2019/04/sirius.jpg ' +
'370w, ' +
'http://localhost/wordpress/wp-content/uploads/2019/04/sirius-217x300.jpg ' +
'217w" ' +
'/></figure>\n',
protected: false
},
excerpt: {
rendered: '',
protected: false
},
author: 1,
featured_media: 0,
comment_status: 'open',
ping_status: 'open',
sticky: false,
template: '',
format: 'standard',
meta: [],
categories: [
3
],
tags: [],
_links: {
self: [Array],
collection: [Array],
about: [Array],
author: [Array],
replies: [Array],
'version-history': [Array],
'predecessor-version': [Array],
'wp:attachment': [Array],
'wp:term': [Array],
curies: [Array]
},
_embedded: {
author: [Array],
'wp:term': [Array]
}
}
]
Но, как вы видите, нет featured_media. У меня есть недопонимание относительно featured_media? Я создал свой пост с изображением, как вы можете видеть в content.rendered
Вы не установили изображение для вашего поста, поэтому возвращается 0 в объекте с изображением. После того как вы его установите, вы сможете использовать объект изображения.
Например: я написал это на PHP, вы можете загрузить это на другой хост и отображать изображения веб-сайта WordPress, который вы указали в URL-переменной на этих хостах.
$url="url вашего веб-сайта wordpress";
function Json_Data_Decoder($query){
global $url;
$json = file_get_contents($url.'/wp-json/wp/v2/'. $query);
$data = json_decode($json);
return $data;
}
function Get_Media($post_media){
global $url;
$json = file_get_contents($url.'/wp-json/wp/v2/media?include=".$post_media);
$medias = json_decode($json);
$featured_image = $medias[0]->media_details->sizes->medium->source_url;
return $featured_image;
}
$posts = Json_Data_Decoder("posts');
foreach ($posts as $post){
// получить медиа
$post_media = $post->featured_media;
$featured_image = Get_media($post_media);
echo
'<article class="post image">
<img src="'.
$featured_image .
'">
</article>';
}
.
Ответ или решение
Почему в вашем API-запросе нет отмеченного медиа-контента?
Введение
При работе с REST API WordPress бывает важно правильно настраивать функционал для работы с изображениями и медиа-контентом. В вашем случае запрос к API возвращает данные о постах, но поле featured_media
равно 0. Это может вызвать замешательство, особенно если в посте есть изображение, однако это не обязательно означает, что у вас все правильно настроено.
Причины отсутствия featured_media
Поле featured_media
в ответе на ваш запрос возвращает 0, что указывает на то, что для поста не установлено ключевое изображение. В WordPress вы можете добавлять изображения в посты несколькими способами, но для корректного заполнения поля featured_media
необходимо явно назначить изображение как "изображение записи".
Давайте рассмотрим, как можно изменить это:
-
Установите изображение записи: При создании или редактировании поста в WordPress необходимо установить изображение записи вручную. Это можно сделать через интерфейс администратора, выбрав нужное изображение в медиабиблиотеке и нажав "Задать изображение записи".
-
Проверка значения
featured_media
: Убедитесь, что после установки изображений вы запрашиваете API. Если значениеfeatured_media
все еще равно 0, убедитесь, что вы действительно установили медиа как изображение записи.
Пример установки изображения записи с помощью PHP
Если вы работаете с программным обеспечением, и вам необходимо автоматизировать процесс, ниже приведен пример кода на PHP, который может помочь:
$post_id = 3; // ID вашего поста
$media_id = 4; // ID медиа-контента (изображения) в медиабиблиотеке
set_post_thumbnail($post_id, $media_id);
Этот код устанавливает изображение записи для поста с указанным ID.
Пример получения изображения записи через API
Если вы уже установили изображение записи, вы сможете получать данные о медиа с помощью следующего (измененного) кода:
function Get_Media($post_media) {
global $url;
$json = file_get_contents($url.'/wp-json/wp/v2/media?include=' . $post_media);
$medias = json_decode($json);
if (!empty($medias)) {
return $medias[0]->media_details->sizes->medium->source_url;
}
return null; // Возвращаем null, если медиа нет
}
$posts = Json_Data_Decoder("posts");
foreach ($posts as $post){
$post_media = $post->featured_media;
$featured_image = Get_Media($post_media);
if ($featured_image) {
echo '<article class="post image"><img src="' . $featured_image . '" alt=""></article>';
} else {
echo '<article class="post"><p>Изображение отсутствует</p></article>';
}
}
Заключение
Отсутствие featured_media
в ответе API не является ошибкой в коде, а скорее указывает на то, что медиа-файл не был задан как изображение записи. Убедитесь, что все настройки выполнены правильно, и попробуйте снова.
Будучи в курсе этих нюансов, вы сможете более эффективно взаимодействовать с WordPress API и управлять медиа-контентом, что непременно повысит качество вашего контента и пользовательский опыт.