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

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

Я пытаюсь получить изображение поста с помощью WordPress REST API. Я добавляю расширение ?embed в конец URL REST API и вижу данные о изображении под [‘wp:featuredmedia’], но не могу отобразить эти данные.

Я использую Vue для отображения данных из REST API, и что я сейчас делаю, чтобы попытаться получить источник изображения: post._embedded[‘wp:featuredmedia’][0].source_url

Но при этом он не может найти источник URL изображения, и я не уверен, что не так с моим путем, почему он не может найти данные источника URL?

Я использовал плагин Better REST API Featured Image, который добавляет URL изображения в ответ оригинального API.

Если вы не хотите добавлять дополнительный плагин для этого, вы можете добавить в файл functions.php следующий код:

add_action('rest_api_init', 'register_rest_images' );function register_rest_images(){
    register_rest_field( array('post'),
        'featured_image', //**это имя появляется в JSON ответе**
        array(
            'get_callback'    => 'get_rest_featured_image',
            'update_callback' => null,
            'schema'          => null,
        )
    );
}function get_rest_featured_image( $object, $field_name, $request ) {
    if( $object['featured_media'] ){
        $img = wp_get_attachment_image_src( $object['featured_media'], 'app-thumb' );
        return $img[0];
    }
    return false;
}

Таким образом, в PHP после разбора ответа вы можете отобразить изображение следующим образом:

$view_posts = json_decode($curl_res);
foreach ($view_posts as $post_data) {
    $post_info[$count]['image']         = (string)$post_data->featured_image;
    //ваш код
} //end foreach loop

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

Чтобы извлечь избранное изображение из REST API WordPress и корректно отобразить его, выполните следующие шаги с учетом использования инструмента Vue.js:

Проблема

Вы столкнулись с трудностью при попытке получить URL избранного изображения через WordPress REST API, используя _embedded элемент. Запрос на получение изображения через post._embedded['wp:featuredmedia'][0].source_url не дает ожидаемого результата.

Решения

  1. Проверка корректности запросов:

    • Убедитесь, что запрос к API правильно сформирован и возвращает все данные. Использование параметра ?_embed должно обеспечивать вложение всех необходимых сведений, включая данные об изображении.
    • Убедитесь, что ваш запрос к соответствующему URL API возвращает данные, содержащие 'wp:featuredmedia'.
  2. Проверка и исправление кода во Vue.js:

    • Проверьте, правильно ли вы обрабатываете данные, возвращаемые из API. Попробуйте сделать проверку (например, через консоль разработчика) доступа к post._embedded['wp:featuredmedia'] и убедитесь, что массив содержит допустимый объект с source_url.
    • Возможная ошибка могла быть связана с отсутствием изображений у некоторых записей. Убедитесь, что запись действительно имеет избранное изображение.
  3. Использование плагина:

    • Вы можете установить плагин Better REST API Featured Image, который добавляет URL избранного изображения в стандартный ответ API. Это решает вашу задачу с минимальными усилиями.
  4. Добавление функциональности в functions.php:

    • Если вы хотите избежать использования плагина, можно добавить следующий код в файл functions.php вашей темы. Это добавит избранное изображение в ваш API ответ.
    • Вот пример, как это сделать:

      add_action('rest_api_init', 'register_rest_images');
      function register_rest_images(){
        register_rest_field(array('post'),
            'featured_image', // это имя, под которым изображение будет отображаться в JSON-ответе
            array(
                'get_callback'    => 'get_rest_featured_image',
                'update_callback' => null,
                'schema'          => null,
            )
        );
      }
      
      function get_rest_featured_image($object, $field_name, $request) {
        if ($object['featured_media']) {
            $img = wp_get_attachment_image_src($object['featured_media'], 'app-thumb');
            return $img[0];
        }
        return false;
      }
  5. Обработка данных в PHP:

    • После добавления кода в functions.php, вы можете использовать следующий код для извлечения изображения:
      $view_posts = json_decode($curl_res);
      foreach ($view_posts as $post_data) {
        $post_info[$count]['image'] = (string)$post_data->featured_image;
        // ваш код
      }
    • Это позволит сформировать необходимые данные с изображениями для дальнейшего использования.

Заключение

Выбор конкретного решения зависит от ваших предпочтений и требований проекта. Плагин может быть более простым и быстрым решением, в то время как добавление кода в functions.php предоставляет больше возможностей для кастомизации. Убедитесь, что выбранный вами метод соответствует вашим целям и удобен в долговременной поддержке проекта.

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

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