Получение URL изображения вместо ID вложения в REST API
Я хочу показывать последние записи в моем Android-приложении и использую эту конечную точку для получения списка записей https://www.geekdashboard.com/wp-json/wp/v2/posts
Как получить полный URL изображения записи вместо его идентификатора?
"featured_media": 39913,
Я не хочу использовать плагины, возможно ли это сделать с помощью functions.php?
Вы можете модифицировать ответы REST API в файле functions.php темы следующим образом.
function ws_register_images_field() {
register_rest_field(
'post',
'images',
array(
'get_callback' => 'ws_get_images_urls', // Функция для получения URL изображений
'update_callback' => null,
'schema' => null,
)
);
}
// Регистрируем поле при инициализации REST API
add_action( 'rest_api_init', 'ws_register_images_field' );
function ws_get_images_urls( $object, $field_name, $request ) {
// Получаем URL изображения среднего размера
$medium = wp_get_attachment_image_src( get_post_thumbnail_id( $object->id ), 'medium' );
$medium_url = $medium['0'];
// Получаем URL изображения большого размера
$large = wp_get_attachment_image_src( get_post_thumbnail_id( $object->id ), 'large' );
$large_url = $large['0'];
// Возвращаем массив с URL изображений
return array(
'medium' => $medium_url,
'large' => $large_url,
);
}
Если вы не можете модифицировать ответ REST API, вы можете запросить информацию о медиафайле следующим образом: curl http://ваш-сайт.com/wp-json/wp/v2/media/<id>

Следует использовать register_rest_field вместо register_api_field. В версии 2 это было удалено. После замены на register_rest_field ваш код заработал. Я отредактировал ваш ответ. Пожалуйста, примите его.

Модифицируя пример @ville6000, мне удалось решить свою проблему:
add_action( 'rest_api_init', 'ws_register_images_field' );
function ws_register_images_field() {
register_rest_field(
'post', // название произвольного типа записи
'attachment_url_images', // название массива на ваше усмотрение
array(
'get_callback' => 'ws_get_images_urls',
'update_callback' => null,
'schema' => null,
)
);
}
function ws_get_images_urls( $object, $field_name, $request ) {
$custom_fields = get_post_custom($object['id']);
$main_image = $custom_fields['your_custom_images_array_name'];
$image_urls = array();
foreach ( $main_image as $key => $value ) {
$imagesID = explode(',' ,$value);
foreach ($imagesID as $id => $value) {
$image_urls[ $key ] = wp_get_attachment_url($value);
//$custom_fields[ $id ] = $image_urls;
}
};
return $image_urls;
//return count($main_image);
}
Добавьте этот код в файл functions.php вашей темы.
Удачного кодинга...
