Диагностика проблемы с доступом к видео в WooCommerce
При продаже цифрового видео контента через WooCommerce часто возникает задача ограничить просмотр видео только для покупателей или определённых групп пользователей. Без правильной настройки видео может быть доступно всем, что ведёт к потере дохода и нарушению авторских прав. Основная проблема — стандартный плеер или вставка видео не учитывают статус пользователя и права доступа.
Чтобы проверить, есть ли проблема, откройте страницу с видео от имени неавторизованного пользователя или гостя и посмотрите, доступно ли видео. Если видео воспроизводится без ограничений — нужно настраивать разграничение доступа.
Пошаговое решение: ограничение доступа к видео в WooCommerce
1. Используем встроенные возможности WooCommerce для цифровых товаров
Если видео продаётся как цифровой файл, во вкладке товара в WooCommerce укажите тип товара «Скачиваемый». WooCommerce автоматически ограничит скачивание только покупателям.
Однако этот способ не ограничивает просмотр встроенного видео на странице товара или блога, если вставка видео сделана через стандартный HTML или плеер.
2. Ограничение просмотра видео через код и хуки WordPress
Для динамического контроля доступа используйте фильтрацию контента с помощью PHP. Например, можно обернуть вывод видео в проверку статуса пользователя и его покупок:
function display_video_only_for_buyers( $content ) {
if ( is_singular('product') && has_shortcode( $content, 'video' ) ) {
global $product, $current_user;
wp_get_current_user();
if ( ! is_user_logged_in() ) {
return '<p>Для просмотра видео необходимо войти в аккаунт.</p>';
}
$customer_orders = wc_get_orders( array(
'customer_id' => $current_user->ID,
'limit' => -1,
'status' => array('completed','processing'),
) );
$has_purchased = false;
foreach ( $customer_orders as $order ) {
foreach ( $order->get_items() as $item ) {
if ( $item->get_product_id() === $product->get_id() ) {
$has_purchased = true;
break 2;
}
}
}
if ( ! $has_purchased ) {
return '<p>Для просмотра видео необходимо приобрести товар.</p>';
}
}
return $content;
}
add_filter( 'the_content', 'display_video_only_for_buyers' );Этот код проверяет, что пользователь авторизован и купил текущий продукт. Если нет — выводит сообщение вместо видео (предполагается, что видео вставлено через шорткод [video]).
3. Защита видео файлов от прямого доступа
Ограничение просмотра на уровне страницы не защитит видеофайлы от прямого скачивания по URL. Для этого можно:
- Хранить видео вне публичной директории и отдавать через PHP-скрипт с проверкой прав.
- Использовать плагин защиты контента, например Clearfy Pro, который позволяет ограничить прямой доступ к файлам.
Пример простого PHP-скрипта для отдачи файла с проверкой:
<?php
// video-protect.php
if ( ! is_user_logged_in() ) {
header('HTTP/1.0 403 Forbidden');
exit('Доступ запрещён');
}
$file = $_GET['file'] ?? '';
$allowed_files = ['video1.mp4', 'video2.mp4'];
if ( ! in_array( $file, $allowed_files, true ) ) {
header('HTTP/1.0 404 Not Found');
exit('Файл не найден');
}
$filepath = __DIR__ . '/protected_videos/' . $file;
if ( ! file_exists( $filepath ) ) {
header('HTTP/1.0 404 Not Found');
exit('Файл не найден');
}
header('Content-Type: video/mp4');
header('Content-Disposition: inline; filename="' . basename($file) . '"');
readfile($filepath);
exit;
?>В видео-плеере встраивайте ссылку на этот скрипт, а не на прямой путь к файлу.
Проверка результата после внедрения
- Откройте страницу с видео в браузере в режиме инкогнито — видео должно быть недоступно с сообщением о необходимости входа или покупки.
- Авторизуйтесь под пользователем без покупки — видео также должно быть закрыто.
- Авторизуйтесь под покупателем — видео становится доступно.
- Попробуйте напрямую открыть URL видеофайла — без авторизации доступ должен быть заблокирован (код 403 или 404).
Частые ошибки и как их исправить
- Видео не скрывается для неавторизованных: возможно, видео вставлено вне
the_contentили через плагин, который игнорирует фильтр. Решение — добавить проверку в шаблон или использовать хуки плагина. - Прямой доступ к видео не ограничен: видео лежит в публичной папке
wp-content/uploads. Нужно перенести в защищённую директорию и отдавать через PHP. - Ошибки при проверке покупок: неверно используется ID продукта или статус заказа. Проверяйте, что статус заказа действительно "completed" или "processing".
- Видео не воспроизводится у покупателей: проверьте правильность URL в плеере и права доступа к файлам.
Практические советы по безопасности и производительности
- Для защиты видео используйте серверные механизмы, а не только JS или CSS скрытие.
- Храните видео вне публичной папки, отдавайте через PHP с проверкой прав.
- Кешируйте страницы с видео выборочно, чтобы не показывать контент неавторизованным посетителям.
- Используйте CDN с поддержкой авторизации или токенов для безопасной доставки видео.
- Регулярно обновляйте WooCommerce и плагины безопасности, чтобы избежать обхода ограничений.
Сравнение способов разграничения доступа к видео в WooCommerce
| Метод | Плюсы | Минусы | Пример реализации |
|---|---|---|---|
| Тип товара "Скачиваемый" в WooCommerce | Простая настройка, автоматическое ограничение скачивания | Не ограничивает просмотр видео на страницах | Настройка в админке WooCommerce |
| Фильтр контента с проверкой покупок (PHP) | Гибко, работает с любым плеером, без плагинов | Требует навыков программирования, не защищает файлы напрямую | Код в functions.php (пример выше) |
| Отдача видео через PHP-скрипт с проверкой | Защищает от прямого скачивания, можно интегрировать с WooCommerce | Нагрузка на сервер выше, нужно дополнительное хранение | PHP-скрипт для отдачи файлов (пример выше) |
| Плагин защиты контента (например Clearfy Pro) | Простота настройки, дополнительные функции безопасности | Часто платные, повышенная сложность | Конфигурация в админке |