Вопрос или проблема
Я создаю пользовательские конечные точки для моего пользовательского типа постов, чтобы удалить ненужные поля и ускорить запрос. Я хочу получить 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:
- Откройте URL вашего пользовательского REST API, например:
https://api.digitalharda.com/wp-json/myrestapi/v1/digievent
. - Просмотрите возвращаемые данные. Убедитесь, что поля
top_image
иbottom_image
появляются с соответствующими URL изображений. - Если какие-либо данные по-прежнему отсутствуют, проверьте, правильно ли установлены поля ACF в вашем админ-интерфейсе, и что они связаны с соответствующим типом записи
digievent
.
Заключение
Теперь вы сможете извлекать изображения из поля ad_1
вашего пользовательского типа записей через ваш пользовательский REST API. Следуйте приведенным выше шагам, чтобы без проблем получить доступ к необходимым данным. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь запрашивать!