Как настроить защиту видео в WooCommerce для авторизованных пользователей

Диагностика проблемы: почему видео в WooCommerce доступны всем

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

Проверка ситуации:

  • Зайдите на страницу товара, купите его под тестовым аккаунтом и проверьте, можете ли вы получить прямую ссылку на видео.
  • Попробуйте открыть эту ссылку в режиме инкогнито — видео не должно воспроизводиться.

Если видео воспроизводится без авторизации — защита не настроена.

Пошаговое решение: защита видео в WooCommerce с проверкой авторизации

1. Использование приватных ссылок и проверки доступа через PHP

Самый простой способ — хранить видео вне публичной директории и выдавать их через скрипт с проверкой прав пользователя.

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

function serve_protected_video() {
    if ( ! is_user_logged_in() ) {
        wp_die('Доступ запрещён: войдите в аккаунт для просмотра видео.');
    }

    // Получаем ID видео из параметров запроса
    $video_id = isset($_GET['video_id']) ? intval($_GET['video_id']) : 0;
    if ( ! $video_id ) {
        wp_die('Видео не найдено.');
    }

    // Проверяем, купил ли пользователь товар с этим видео
    $user_id = get_current_user_id();
    $orders = wc_get_orders(array(
        'customer_id' => $user_id,
        'status' => array('completed', 'processing')
    ));

    $has_access = false;
    foreach ($orders as $order) {
        foreach ($order->get_items() as $item) {
            $product_id = $item->get_product_id();
            $video_meta = get_post_meta($product_id, 'protected_video_id', true);
            if ($video_meta == $video_id) {
                $has_access = true;
                break 2;
            }
        }
    }

    if ( ! $has_access ) {
        wp_die('У вас нет доступа к этому видео.');
    }

    // Путь к видеофайлу на сервере
    $file_path = WP_CONTENT_DIR . '/protected_videos/video_' . $video_id . '.mp4';

    if ( ! file_exists($file_path) ) {
        wp_die('Файл видео не найден.');
    }

    // Отдаём файл с правильными заголовками
    header('Content-Type: video/mp4');
    header('Content-Length: ' . filesize($file_path));
    readfile($file_path);
    exit;
}

add_action('template_redirect', function() {
    if (isset($_GET['serve_video'])) {
        serve_protected_video();
    }
});

В этом примере видео не лежит в публичной директории, а выдаётся через скрипт с проверкой заказов пользователя. Для связи товара и видео добавляем мета-поле protected_video_id.

2. Встраивание видео с защищённой ссылкой в страницу товара

На странице товара вместо прямой вставки URL видео используйте ссылку на скрипт с параметром, например:

<video controls>
  <source src="<?php echo site_url('?serve_video=1&video_id=' . $video_id); ?>" type="video/mp4">
</video>

Где $video_id — уникальный идентификатор видео, связанный с товаром.

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

  • Авторизуйтесь под аккаунтом, купившим товар, откройте страницу с видео — видео должно воспроизводиться.
  • Попробуйте открыть прямой URL ?serve_video=1&video_id=XX в режиме инкогнито — доступ должен быть запрещён.
  • Проверьте, что без параметра доступа к видео нет.

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

  • Видео лежит в публичной папке — любой может получить прямую ссылку. Решение: храните видео вне публичных каталогов, отдавайте через PHP.
  • Проверка доступа не учитывает статус заказа — пользователь без купленного товара видит видео. Проверьте, что проверяете только статусы completed и processing.
  • Неправильные заголовки HTTP — видео не воспроизводится или скачивается целиком. Используйте Content-Type: video/mp4 и Content-Length.
  • Прямая вставка ссылок на видео в редакторе — обходите защиту. Вынесите ссылки из контента и отдавайте через защитный скрипт.

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

  • Используйте X-Accel-Redirect или X-Sendfile через сервер (nginx/apache) для отдачи больших видеофайлов, чтобы снизить нагрузку PHP.
  • Обновляйте WooCommerce и WordPress для защиты от уязвимостей.
  • Лимитируйте частоту запросов к видео для предотвращения DDoS.
  • Храните видео в отдельной директории с ограничениями доступа на уровне сервера.

Сравнение способов защиты видео в WooCommerce

МетодОписаниеПлюсыМинусы
Прямая ссылка в редактореВидео доступно по URL без ограниченийПросто реализоватьНет защиты, доступно всем
Отдача через PHP с проверкойВидео хранится вне публичных папок, доступ по проверке авторизацииХорошая защита, гибкостьНагрузка на сервер, настройка сложнее
Использование плагинов DRMПлагины для защиты видео с DRMМаксимальная защита, готовое решениеПлатно, сложность интеграции
Как запретить вставку видео в WooCommerce для неавторизованных пользователей
13.05.2026
Оптимизация видео для WordPress: практические методы и плагины
11.11.2025
Как запретить скачивание видео в WooCommerce для неавторизованных пользователей
09.05.2026
Авторизация и защита видео контента в WordPress
24.03.2026
Как настроить динамические видео рекламные блоки в WordPress
05.04.2026