Вопрос или проблема
Я разрабатываю плагин. Я получаю информацию с помощью 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 функции для их отображения. Этот процесс можно реализовать следующим образом:
- Скачивание изображения: Получите изображение через API и сохраните его на сервере.
- Загрузка изображения в библиотеку медиа: Используйте
wp_insert_attachment()
для сохранения изображения в системе вложений WordPress. - Отображение изображения: Теперь, когда изображение сохранено как вложение, вы можете использовать
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 плагин, следуя лучшим практикам платформы. Это способствует повышению безопасности и производительности вашего проекта.
Надеюсь, данный подход поможет вам достичь наилучших результатов в разработке вашего плагина.