Показать изображение в разработке плагина

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

Я разрабатываю плагин. Я получаю информацию с помощью API вместе с изображением. Мой код выглядит следующим образом.

`$this->short_code .= '<div class="ft_wi_weather_all" >' . (  ( array_key_exists( 'weather_symbol', $meta_details ) && 'on' == $meta_details['weather_symbol'][0] ) ? '<div class="ft_wi_image"><img src="' . esc_url( 'http://openweathermap.org/img/w/' . $this->weather_info->weather[0]->icon . '.png' ) . '"></div>' : '' );`

Я проверяю код моего плагина с помощью плагина Plugin Check. Я получаю ошибку Изображения должны быть добавлены с использованием wp_get_attachment_image() или подобных функций.

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

.

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

В процессе разработки плагина для WordPress вы столкнулись с необходимостью отображения изображений, полученных через API, и получили замечание от плагина Plugin Check, что изображения должны добавляться с помощью функций, таких как wp_get_attachment_image(). Данная ошибка возникает из-за того, что WordPress отдает предпочтение собственной системе управления медиафайлами для обеспечения стандартизации и безопасности. Разберем, как корректно решить эту задачу:

Функциональный Анализ

В вашем текущем коде изображение добавляется через стандартный HTML-тег <img> с URL:

$this->short_code .= '<div class="ft_wi_weather_all">' . ( ( array_key_exists( 'weather_symbol', $meta_details ) && 'on' == $meta_details['weather_symbol'][0] ) ? '<div class="ft_wi_image"><img src="' . esc_url( 'http://openweathermap.org/img/w/' . $this->weather_info->weather[0]->icon . '.png' ) . '"></div>' : '' );

Это не занимает все возможности WordPress по управлению изображениями, такими как кэширование, генерация разных размеров и применение фильтров.

Решение с использованной функцией wp_get_attachment_image()

Поскольку изображения загружаются через API, они не существуют в библиотеке медиа WordPress. Чтобы привести код в соответствие с рекомендациями, можно сохранить изображения в качестве вложений и использовать WP функции для их отображения. Этот процесс можно реализовать следующим образом:

  1. Скачивание изображения: Получите изображение через API и сохраните его на сервере.
  2. Загрузка изображения в библиотеку медиа: Используйте wp_insert_attachment() для сохранения изображения в системе вложений WordPress.
  3. Отображение изображения: Теперь, когда изображение сохранено как вложение, вы можете использовать wp_get_attachment_image().

Пример реализации:

Вот пример, как можно реализовать этот процесс:

Шаг 1: Скачивание и сохранение изображения

function download_and_save_image($image_url) {
    // Получаем изображение.
    $temp_file = download_url($image_url);
    if (is_wp_error($temp_file)) {
        return $temp_file;
    }

    // Путь сохранения
    $file_array = array(
        'name' => basename($image_url),
        'tmp_name' => $temp_file,
    );

    // Магия вставки вложения
    $attachment_id = media_handle_sideload($file_array, 0);

    // Если возникли ошибки
    if (is_wp_error($attachment_id)) {
        @unlink($file_array['tmp_name']);
        return $attachment_id;
    }

    return $attachment_id;
}

Шаг 2: Используйте wp_get_attachment_image()

После добавления изображения в библиотеку, его ID можно использовать, чтобы вывести изображение в нужном месте:

$image_id = download_and_save_image('http://openweathermap.org/img/w/' . $this->weather_info->weather[0]->icon . '.png');
if (!is_wp_error($image_id)) {
    $this->short_code .= wp_get_attachment_image($image_id, 'full', false, array('class' => 'ft_wi_image'));
} else {
    // Логика обработки ошибки
}

Заключение

При помощи вышеописанных шагов вы сможете успешно интегрировать изображения, загруженные через API, в WordPress плагин, следуя лучшим практикам платформы. Это способствует повышению безопасности и производительности вашего проекта.

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

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

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