Вопрос или проблема
Я пытаюсь получить изображение поста с помощью WordPress REST API. Я добавляю расширение ?embed в конец URL REST API и вижу данные о изображении под [‘wp:featuredmedia’], но не могу отобразить эти данные.
Я использую Vue для отображения данных из REST API, и что я сейчас делаю, чтобы попытаться получить источник изображения: post._embedded[‘wp:featuredmedia’][0].source_url
Но при этом он не может найти источник URL изображения, и я не уверен, что не так с моим путем, почему он не может найти данные источника URL?
Я использовал плагин Better REST API Featured Image, который добавляет URL изображения в ответ оригинального API.
Если вы не хотите добавлять дополнительный плагин для этого, вы можете добавить в файл functions.php
следующий код:
add_action('rest_api_init', 'register_rest_images' );function register_rest_images(){
register_rest_field( array('post'),
'featured_image', //**это имя появляется в JSON ответе**
array(
'get_callback' => 'get_rest_featured_image',
'update_callback' => null,
'schema' => null,
)
);
}function get_rest_featured_image( $object, $field_name, $request ) {
if( $object['featured_media'] ){
$img = wp_get_attachment_image_src( $object['featured_media'], 'app-thumb' );
return $img[0];
}
return false;
}
Таким образом, в PHP после разбора ответа вы можете отобразить изображение следующим образом:
$view_posts = json_decode($curl_res);
foreach ($view_posts as $post_data) {
$post_info[$count]['image'] = (string)$post_data->featured_image;
//ваш код
} //end foreach loop
Ответ или решение
Чтобы извлечь избранное изображение из REST API WordPress и корректно отобразить его, выполните следующие шаги с учетом использования инструмента Vue.js:
Проблема
Вы столкнулись с трудностью при попытке получить URL избранного изображения через WordPress REST API, используя _embedded элемент. Запрос на получение изображения через post._embedded['wp:featuredmedia'][0].source_url
не дает ожидаемого результата.
Решения
-
Проверка корректности запросов:
- Убедитесь, что запрос к API правильно сформирован и возвращает все данные. Использование параметра
?_embed
должно обеспечивать вложение всех необходимых сведений, включая данные об изображении. - Убедитесь, что ваш запрос к соответствующему URL API возвращает данные, содержащие
'wp:featuredmedia'
.
- Убедитесь, что запрос к API правильно сформирован и возвращает все данные. Использование параметра
-
Проверка и исправление кода во Vue.js:
- Проверьте, правильно ли вы обрабатываете данные, возвращаемые из API. Попробуйте сделать проверку (например, через консоль разработчика) доступа к
post._embedded['wp:featuredmedia']
и убедитесь, что массив содержит допустимый объект сsource_url
. - Возможная ошибка могла быть связана с отсутствием изображений у некоторых записей. Убедитесь, что запись действительно имеет избранное изображение.
- Проверьте, правильно ли вы обрабатываете данные, возвращаемые из API. Попробуйте сделать проверку (например, через консоль разработчика) доступа к
-
Использование плагина:
- Вы можете установить плагин Better REST API Featured Image, который добавляет URL избранного изображения в стандартный ответ API. Это решает вашу задачу с минимальными усилиями.
-
Добавление функциональности в
functions.php
:- Если вы хотите избежать использования плагина, можно добавить следующий код в файл
functions.php
вашей темы. Это добавит избранное изображение в ваш API ответ. -
Вот пример, как это сделать:
add_action('rest_api_init', 'register_rest_images'); function register_rest_images(){ register_rest_field(array('post'), 'featured_image', // это имя, под которым изображение будет отображаться в JSON-ответе array( 'get_callback' => 'get_rest_featured_image', 'update_callback' => null, 'schema' => null, ) ); } function get_rest_featured_image($object, $field_name, $request) { if ($object['featured_media']) { $img = wp_get_attachment_image_src($object['featured_media'], 'app-thumb'); return $img[0]; } return false; }
- Если вы хотите избежать использования плагина, можно добавить следующий код в файл
-
Обработка данных в PHP:
- После добавления кода в
functions.php
, вы можете использовать следующий код для извлечения изображения:$view_posts = json_decode($curl_res); foreach ($view_posts as $post_data) { $post_info[$count]['image'] = (string)$post_data->featured_image; // ваш код }
- Это позволит сформировать необходимые данные с изображениями для дальнейшего использования.
- После добавления кода в
Заключение
Выбор конкретного решения зависит от ваших предпочтений и требований проекта. Плагин может быть более простым и быстрым решением, в то время как добавление кода в functions.php
предоставляет больше возможностей для кастомизации. Убедитесь, что выбранный вами метод соответствует вашим целям и удобен в долговременной поддержке проекта.