WordPress пользовательский Rest Api – Как получить URL изображения?

Вопрос или проблема

Я создаю пользовательские конечные точки для моего пользовательского типа постов, чтобы удалить ненужные поля и ускорить запрос. Я хочу получить URL изображения из моего пользовательского типа постов. Пожалуйста, проверьте код для получения дополнительной информации. Я не могу получить поле изображения. По этой ссылке это то, что я получаю по умолчанию при вызове REST API, что я хочу на своей пользовательской конечной точке **(URL изображения top_image)**. Пожалуйста, проверьте метод, который я использую, и получаю данные null. Где я ошибаюсь? Пожалуйста, помогите мне.

Вот мой код REST API:

function digital_digievent() {
$args = [
    'numberposts' => 99999,
    'post_type' => 'digievent'
];

$posts = get_posts($args);

$data = [];
$i = 0;

foreach($posts as $post) {
    $data[$i]['id'] = $post->ID;
    $data[$i]['EventTitle'] = $post->post_title;
    $data[$i]['EventOrganizeBy'] = $post->organize_by;
    $data[$i]['EventPlace'] = $post->event_place;
    $data[$i]['EventDate'] = $post->event_date;
    $data[$i]['EventTime'] = $post->event_time;
    $data[$i]['EventContent'] = apply_filters( 'the_content', $post->post_content );
    $data[$i]['EventExcerpt'] = $post->post_excerpt;
    $data[$i]['Slug'] = $post->post_name;
    $data[$i]['EventLink'] = get_the_permalink($post->ID);
    $data[$i]['EventDate'] = $post->post_date;
    $data[$i]['EventGuid'] = $post->guid;
    $data[$i]['EventFeaturedImage']['thumbnail'] = get_the_post_thumbnail_url($post->ID, 'thumbnail');
    $data[$i]['EventFeaturedImage']['medium'] = get_the_post_thumbnail_url($post->ID, 'medium');
    $data[$i]['EventFeaturedImage']['large'] = get_the_post_thumbnail_url($post->ID, 'large');
    $data[$i]['top_image'] = $post->ad_1[0]['top_image'];

    $i++;
}

return $data;

}

add_action(‘rest_api_init’, function() {
register_rest_route(‘myrestapi/v1’, ‘digievent’, [
‘methods’ => ‘GET’,
‘callback’ => ‘digital_digievent’,
]);

});

Что я хочу, так это URL изображения (guid) для полей top_image и bottom_image для ad_1.

$post->ad_1[0]['top_image'] не вернет данные, потому что вы не в JS, который получил ответ от вашего REST API, который внедрил значение ad_1 в объект, который он возвращает вам.

В вашем PHP коде $post имеет тип WP_Post, и в нем нет ad_1, поэтому вы получаете null. Я не знаю, что такое ad_1 в вашей структуре данных. Возможно, это поле ACF или просто метаполе; если это ACF, вам нужно получить его, как get_field( 'ad_1', $post ).

Проверьте ваш код, который внедряет значение ad_1 в ваш текущий REST маршрут, который отвечает с одним элементом, и сделайте то же самое для группового ответа.

Ответ или решение

Как получить URL изображений из пользовательского REST API в WordPress?

Создание пользовательских конечных точек REST API для вашего пользовательского типа записей в WordPress — отличный способ оптимизировать загрузку данных, исключив ненужные поля. В вашем случае вы хотите получить URL изображений, связанных с вашим полем ad_1, но встречаете проблему с получением данных.

Вот пошаговое руководство, как это исправить, чтобы вы могли без проблем извлекать необходимые URLs изображений.

1. Понимание структуры данных

Сначала необходимо выяснить, что такое ad_1. Ваша команда обнаружила, что это может быть полем, созданным плагином Advanced Custom Fields (ACF) или собственным метаполем. Для того чтобы корректно извлечь данные, если это ACF-поле, нужно использовать функцию get_field.

2. Изменение вашего кода

Чтобы получить данные из поля ad_1, необходимо изменить ваш код следующим образом:

function digital_digievent() {
    $args = [
        'numberposts' => 99999,
        'post_type' => 'digievent'
    ];

    $posts = get_posts($args);
    $data = [];
    $i = 0;

    foreach ($posts as $post) {
        $data[$i]['id'] = $post->ID;
        $data[$i]['EventTitle'] = $post->post_title;
        $data[$i]['EventOrganizeBy'] = $post->organize_by;
        $data[$i]['EventPlace'] = $post->event_place;
        $data[$i]['EventDate'] = $post->event_date;
        $data[$i]['EventTime'] = $post->event_time;
        $data[$i]['EventContent'] = apply_filters('the_content', $post->post_content);
        $data[$i]['EventExcerpt'] = $post->post_excerpt;
        $data[$i]['Slug'] = $post->post_name;
        $data[$i]['EventLink'] = get_the_permalink($post->ID);
        $data[$i]['EventDate'] = $post->post_date;
        $data[$i]['EventGuid'] = $post->guid;
        $data[$i]['EventFeaturedImage']['thumbnail'] = get_the_post_thumbnail_url($post->ID, 'thumbnail');
        $data[$i]['EventFeaturedImage']['medium'] = get_the_post_thumbnail_url($post->ID, 'medium');
        $data[$i]['EventFeaturedImage']['large'] = get_the_post_thumbnail_url($post->ID, 'large');

        // Получаем данные ACF поля ad_1
        $ad_1 = get_field('ad_1', $post->ID);
        if ($ad_1) {
            $data[$i]['top_image'] = $ad_1['top_image']; // Если top_image - URL изображения
            $data[$i]['bottom_image'] = $ad_1['bottom_image']; // Если bottom_image - URL изображения
        } else {
            $data[$i]['top_image'] = null;
            $data[$i]['bottom_image'] = null;
        }

        $i++;
    }

    return $data;
}

add_action('rest_api_init', function() {
    register_rest_route('myrestapi/v1', 'digievent', [
        'methods' => 'GET',
        'callback' => 'digital_digievent',
    ]);
});

3. Проверка и отладка

После внесенных изменений выполните следующие шаги для проверки работы вашего клиента API:

  1. Откройте URL вашего пользовательского REST API, например: https://api.digitalharda.com/wp-json/myrestapi/v1/digievent.
  2. Просмотрите возвращаемые данные. Убедитесь, что поля top_image и bottom_image появляются с соответствующими URL изображений.
  3. Если какие-либо данные по-прежнему отсутствуют, проверьте, правильно ли установлены поля ACF в вашем админ-интерфейсе, и что они связаны с соответствующим типом записи digievent.

Заключение

Теперь вы сможете извлекать изображения из поля ad_1 вашего пользовательского типа записей через ваш пользовательский REST API. Следуйте приведенным выше шагам, чтобы без проблем получить доступ к необходимым данным. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь запрашивать!

Оцените материал
Добавить комментарий

Капча загружается...