Как автоматически устанавливать миниатюры видео в WooCommerce на WordPress

Проблема: отсутствие миниатюр видео в карточках товаров WooCommerce

В WooCommerce стандартно нет автоматической поддержки установки миниатюр (thumbnail) для видео, добавленных в описание или галерею товара. Это приводит к пустым или неинформативным изображениям в каталоге, ухудшая UX и конверсию. Решение — автоматически генерировать и назначать миниатюры видео как изображения товара.

Диагностика проблемы

Чтобы проверить, что миниатюры видео не установлены или не работают:

  • Откройте карточку товара в админке WooCommerce.
  • Проверьте, есть ли установленное изображение товара (featured image).
  • Если видео вставлено в описание или галерею, но нет миниатюры, значит автоматического создания нет.
  • Проверьте, не конфликтует ли тема или плагины с установкой миниатюр.

Пошаговое решение: автоматическая установка миниатюр видео в WooCommerce

1. Используем PHP-библиотеку ffmpeg для создания скриншота из видео

Для извлечения кадра из видео на сервере нам потребуется ffmpeg, установленный на хостинге. Проверить наличие можно командой ffmpeg -version в SSH.

2. Добавляем код обработки загрузки видео и создания миниатюры

В functions.php вашей темы или в кастомном плагине добавьте следующий код:

function wpvideo_set_video_thumbnail_woocommerce($post_id) {
    // Проверяем, что это продукт WooCommerce
    if (get_post_type($post_id) !== 'product') return;

    // Получаем URL видео из произвольного поля (например, 'product_video_url')
    $video_url = get_post_meta($post_id, 'product_video_url', true);
    if (!$video_url) return;

    // Путь к временной папке для скачивания видео
    $upload_dir = wp_upload_dir();
    $temp_video_path = $upload_dir['basedir'] . '/temp_video_' . $post_id . '.mp4';

    // Скачиваем видео локально
    $video_data = wp_remote_get($video_url);
    if (is_wp_error($video_data)) return;
    file_put_contents($temp_video_path, wp_remote_retrieve_body($video_data));

    // Путь для миниатюры
    $thumbnail_path = $upload_dir['basedir'] . '/video_thumbnail_' . $post_id . '.jpg';

    // Формируем команду ffmpeg для создания кадра на 3 секунде
    $cmd = "ffmpeg -ss 00:00:03 -i " . escapeshellarg($temp_video_path) . " -frames:v 1 -q:v 2 " . escapeshellarg($thumbnail_path);
    exec($cmd);

    // Проверяем, создан ли файл миниатюры
    if (!file_exists($thumbnail_path)) {
        @unlink($temp_video_path);
        return;
    }

    // Импортируем миниатюру в медиабиблиотеку
    $filetype = wp_check_filetype(basename($thumbnail_path), null);
    $attachment = array(
        'post_mime_type' => $filetype['type'],
        'post_title' => 'Video thumbnail ' . $post_id,
        'post_content' => '',
        'post_status' => 'inherit'
    );

    $attach_id = wp_insert_attachment($attachment, $thumbnail_path, $post_id);
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata($attach_id, $thumbnail_path);
    wp_update_attachment_metadata($attach_id, $attach_data);

    // Устанавливаем миниатюру товара
    set_post_thumbnail($post_id, $attach_id);

    // Удаляем временный видеофайл
    @unlink($temp_video_path);
}

// Хук на сохранение товара
add_action('save_post_product', 'wpvideo_set_video_thumbnail_woocommerce');

3. Как использовать

Добавьте в карточку товара метаполе с ключом product_video_url и укажите прямую ссылку на видео (mp4). При сохранении товара миниатюра будет создана и автоматически назначена.

Проверка результата после внедрения

  • Создайте или отредактируйте товар, добавьте ссылку на видео в метаполе product_video_url.
  • Сохраните товар.
  • Перейдите в каталог WooCommerce — миниатюра товара должна отображаться как кадр из видео.
  • Если миниатюра не появилась — проверьте логи ошибок сервера и права на запись в папке uploads.

Частые ошибки и как их исправить

  • ffmpeg не установлен или недоступен: Выдаёт ошибку выполнения команды exec. Решение — уточните у хостера возможность установки ffmpeg или используйте сторонние сервисы для скриншотов.
  • Видео недоступно по ссылке: Ошибка скачивания видео. Проверьте, что ссылка ведёт напрямую к видеофайлу (mp4), а не к странице с плеером.
  • Нет прав на запись в папку uploads: Миниатюра не сохраняется. Установите права 755 для папки wp-content/uploads и вложенных папок.
  • Миниатюра не устанавливается: Проверьте, что функция set_post_thumbnail вызывается с корректным ID вложения.

Практические советы по безопасности и производительности

  • Не храните видео локально на сервере — скачивайте временно и удаляйте сразу после создания миниатюры.
  • Ограничьте размер видео для обработки (например, не более 50 Мб) во избежание перегрузки сервера.
  • Используйте exec осторожно — убедитесь, что параметры команды экранированы через escapeshellarg.
  • Для повышения производительности можно добавить очередь обработки видео через WP-Cron вместо синхронного выполнения при сохранении товара.

Сравнение вариантов автоматической установки миниатюр видео

МетодПлагинКодКомпромисс
ffmpeg на сервереНет стандартного плагинаТребует настройки сервера, гибкийЗависит от хостинга, требует ресурсов
Сторонний API (например, YouTube API)Плагины для YouTubeПростая реализация для YouTubeЗависимость от внешнего сервиса, ограниченный контент
Ручная загрузка миниатюрЛюбой плагин галереиПростая, но требует времениНет автоматизации, человеческий фактор
Как добавить видео отзывы в WordPress с помощью плагинов и кода
13.03.2026
Как исправить ошибку «Не загружается видео» в WooCommerce на WordPress
02.05.2026
Как автоматизировать публикацию видео в WordPress с помощью WPRemark
27.03.2026
Автоматическое добавление подписей к видео в WordPress
27.01.2026
Как создать видео всплывающие окна (pop-up) в WordPress
26.02.2026