Получаем 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 изображений для различных типов постов.

Обсудим ваш проект?

Не ждите идеального момента или подходящего времени — начинайте прямо сейчас! Свяжитесь со мной, и я помогу воплотить ваши идеи в реальность.