Получаем URL изображения вместо ID
Расширение функциональности REST API в WordPress позволяет добавлять кастомные данные в ответ API. В этой статье мы рассмотрим, как добавить URL изображений к объектам, возвращаемым API, с использованием пользовательской функции.
Пример кода
Ниже приведен пример функции, которая добавляет URL изображений для поля featured_media
и дополнительного поля logo
для постов типа portfolio
.
function add_custom_image_urls($data, $post, $context) {
// Обработка поля featured_media для всех типов постов
$featured_image_id = $data->data['featured_media'];
if ($featured_image_id) {
$featured_image_url = wp_get_attachment_image_url($featured_image_id, 'full');
$data->data['featured_media_url'] = $featured_image_url;
} else {
$data->data['featured_media_url'] = null;
}
// Дополнительная обработка для типа поста portfolio
if ($post->post_type == 'portfolio') {
$logo_image_id = get_field('logo', $post->ID); // Используем ACF для получения ID логотипа
if ($logo_image_id) {
$logo_image_url = wp_get_attachment_image_url($logo_image_id, 'full');
$data->data['logo_url'] = $logo_image_url;
} else {
$data->data['logo_url'] = null;
}
}
return $data;
}
// Добавляем фильтры для разных типов постов
add_filter('rest_prepare_services', 'add_custom_image_urls', 10, 3);
add_filter('rest_prepare_portfolio', 'add_custom_image_urls', 10, 3);
Пошаговое руководство
1. Определение функции
Функция add_custom_image_urls
принимает три параметра:
$data
: Данные, возвращаемые API.$post
: Объект текущего поста.$context
: Контекст запроса.
2. Добавление URL основного изображения
Мы получаем ID изображения из поля featured_media
. Затем с помощью функции wp_get_attachment_image_url
получаем URL изображения и добавляем его в данные ответа API.
$featured_image_id = $data->data['featured_media'];
if ($featured_image_id) {
$featured_image_url = wp_get_attachment_image_url($featured_image_id, 'full');
$data->data['featured_media_url'] = $featured_image_url;
} else {
$data->data['featured_media_url'] = null;
}
3. Добавление URL логотипа для постов типа portfolio
Для постов типа portfolio
мы используем Advanced Custom Fields (ACF) для получения ID логотипа и аналогично добавляем URL логотипа в данные ответа API.
if ($post->post_type == 'portfolio') {
$logo_image_id = get_field('logo', $post->ID);
if ($logo_image_id) {
$logo_image_url = wp_get_attachment_image_url($logo_image_id, 'full');
$data->data['logo_url'] = $logo_image_url;
} else {
$data->data['logo_url'] = null;
}
}
4. Добавление фильтров
Для применения функции к различным типам постов мы добавляем фильтры rest_prepare_services
и rest_prepare_portfolio
.
add_filter('rest_prepare_services', 'add_custom_image_urls', 10, 3);
add_filter('rest_prepare_portfolio', 'add_custom_image_urls', 10, 3);
Заключение
Добавление кастомных данных в ответ REST API в WordPress позволяет создавать более гибкие и мощные приложения. Используя приведенный пример кода, вы можете легко расширить возможности API вашего сайта, добавляя необходимые URL изображений для различных типов постов.
Обсудим ваш проект?
Не ждите идеального момента или подходящего времени — начинайте прямо сейчас! Свяжитесь со мной, и я помогу воплотить ваши идеи в реальность.