wpcoding.ru wordpress WP Coding

Как создать автоматическую оптимизацию изображений в WordPress

Оптимизация изображений — одна из ключевых задач для повышения скорости загрузки сайта и улучшения SEO-показателей. В WordPress существует множество плагинов для сжатия и оптимизации картинок, но в этой статье мы подробно рассмотрим, как создать собственное автоматическое решение для оптимизации изображений при их загрузке.

Почему важна автоматическая оптимизация изображений в WordPress

При загрузке медиафайлов в WordPress стандартной функциональностью не предусмотрено эффективного сжатия без потери качества. Большие изображения могут замедлить загрузку страниц, увеличить нагрузку на сервер и негативно повлиять на поведение пользователей.

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

Кроме того, автоматическая оптимизация помогает экономить место на хостинге и уменьшает трафик пользователей.

Обзор популярных плагинов для оптимизации изображений

Для понимания, как работает автоматизация, рассмотрим несколько популярных решений:

  • Smush — популярный плагин для сжатия изображений с возможностью массовой оптимизации и автоматической обработки при загрузке.
  • Imagify — поддерживает различные уровни сжатия и интеграцию с CDN.
  • ShortPixel — сжатие с возможностью конвертации в WebP и оптимизации PDF.

Однако все эти плагины работают через сторонние API или имеют ограничения по бесплатному использованию. Если хочется полного контроля и кастомизации, лучше создать собственный обработчик.

Как реализовать автоматическую оптимизацию изображений в WordPress с помощью PHP и библиотеки Imagick

Для примера создадим функцию wpcoding_optimize_image, которая будет автоматически вызываться при загрузке изображения и сжимать его без потери качества.

Основные шаги:

  1. Подключаемся к хуку wp_generate_attachment_metadata, который срабатывает после загрузки файла и создания миниатюр.
  2. Получаем путь к оригинальному изображению.
  3. Используем Imagick для сжатия и оптимизации.
  4. Сохраняем оптимизированное изображение.

Пример кода для functions.php или собственного плагина

add_filter('wp_generate_attachment_metadata', 'wpcoding_optimize_image', 10, 2); 
function wpcoding_optimize_image($metadata, $attachment_id) {
    $upload_dir = wp_upload_dir();
    $file_path = path_join($upload_dir['basedir'], $metadata['file']);

    if (!extension_loaded('imagick')) {
        error_log('Imagick not installed');
        return $metadata;
    }

    try {
        $image = new Imagick($file_path);

        // Уменьшаем качество до 85 без заметной потери
        $image->setImageCompressionQuality(85);

        // Применяем оптимизацию
        $image->stripImage(); // Удаляет метаданные

        // Сохраняем оптимизированное изображение
        $image->writeImage($file_path);
        $image->clear();
        $image->destroy();
    } catch (Exception $e) {
        error_log('Optimization error: ' . $e->getMessage());
    }

    return $metadata;
}

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

Добавление поддержки WebP и создание дополнительных форматов

WebP — современный формат изображений с лучшим сжатием. Чтобы автоматически создавать WebP-версии, расширим функцию:

function wpcoding_create_webp_versions($metadata, $attachment_id) {
    $upload_dir = wp_upload_dir();
    $file_path = path_join($upload_dir['basedir'], $metadata['file']);

    if (!extension_loaded('imagick')) {
        return $metadata;
    }

    try {
        $image = new Imagick($file_path);

        // Конвертация в WebP
        $webp_path = preg_replace('/\.(jpe?g|png)$/i', '.webp', $file_path);
        $image->setImageFormat('webp');
        $image->writeImage($webp_path);

        $image->clear();
        $image->destroy();

        // Добавим вебп-версию в метаданные
        $metadata['sizes']['webp'] = [
            'file' => basename($webp_path),
            'width' => $metadata['width'],
            'height' => $metadata['height'],
            'mime-type' => 'image/webp',
        ];
    } catch (Exception $e) {
        error_log('WebP conversion error: ' . $e->getMessage());
    }

    return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'wpcoding_create_webp_versions', 11, 2);

Теперь при загрузке дополнительно будет создаваться WebP-копия. Для вывода WebP на сайте можно использовать условный вывод в шаблонах или плагин, поддерживающий WebP.

Практические советы и рекомендации

Мониторинг и логирование ошибок

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

Кэширование и CDN

Оптимизация изображений — только часть ускорения сайта. Рекомендуется использовать кэширование и CDN. Например, плагин Clearfy Pro умеет интегрироваться с кэшированием и оптимизацией.

Использование плагинов для продвинутой оптимизации

Если хочется более комплексного решения, можно рассмотреть WPRemark — плагин для SEO и оптимизации, который может управлять изображениями и метаданными.

Заключение по теме

Автоматическая оптимизация изображений — обязательный элемент современного сайта на WordPress. Создавая собственные решения на базе Imagick, вы получаете гибкость и контроль, не завися от сторонних сервисов. Используйте приведённые примеры как основу и расширяйте функционал под свои задачи.

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙