Получение URL изображения вместо ID вложения в REST API

27 июн. 2017 г., 10:37:36
Просмотры: 22.4K
Голосов: 8

Я хочу показывать последние записи в моем Android-приложении и использую эту конечную точку для получения списка записей https://www.geekdashboard.com/wp-json/wp/v2/posts

Как получить полный URL изображения записи вместо его идентификатора?

"featured_media": 39913,

Я не хочу использовать плагины, возможно ли это сделать с помощью functions.php?

1
Комментарии

вы можете получить ссылку на URL медиафайла, добавив "_embed" в конец базового URL, который вы используете для получения поста. Или можно использовать "&_embed", если в базовом URL уже есть другие фильтры

saed saed
27 мар. 2019 г. 16:00:39
Все ответы на вопрос 2
2

Вы можете модифицировать ответы 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>

27 июн. 2017 г. 11:57:25
Комментарии

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

Amar Ilindra Amar Ilindra
1 июл. 2017 г. 16:57:55

Новый плагин имеет http://mahditajik.ir/wp-json/wp/v2/media/<id>, но он содержит много лишних данных, что замедляет ответ. Как я могу настроить ответ REST API?

Mahdi Mahdi
11 апр. 2018 г. 18:19:20
0

Модифицируя пример @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 вашей темы.
Удачного кодинга...

4 нояб. 2018 г. 19:14:30