Диагностика проблемы: почему видео доступны всем пользователям
В WooCommerce часто возникает задача ограничить просмотр видео товаров только зарегистрированным и вошедшим в систему пользователям. По умолчанию, если видео встроены в описание товара или выведены через шорткод, они доступны любому посетителю. Это создает риск нелегального распространения контента, снижения эксклюзивности и потери прибыли. Чтобы убедиться, что проблема именно в открытом доступе, проверьте:
- Видно ли видео на странице товара без входа в аккаунт?
- Используются ли стандартные методы вставки видео — например, через iframe или шорткод?
- Нет ли активных плагинов, ограничивающих контент?
Если ответ "да" на первый пункт и "нет" на остальные, значит, нужно реализовать ограничение доступа самостоятельно.
Пошаговое решение: ограничиваем видео для гостей в WooCommerce
1. Используем PHP для проверки статуса пользователя
Лучший способ — обернуть вывод видео в проверку “is_user_logged_in()”. Если пользователь не авторизован, показываем сообщение с предложением войти или зарегистрироваться.
2. Пример кода для вывода видео только авторизованным
function wps_restrict_video_to_logged_in( $content ) {
if ( is_product() ) {
if ( ! is_user_logged_in() ) {
// Заменяем видео на сообщение
$content = preg_replace('/<iframe.*?src=".*?".*?</iframe>/is', '<p>Для просмотра видео необходимо <a href="' . wp_login_url( get_permalink() ) . '">войти в аккаунт</a>.</p>', $content);
}
}
return $content;
}
add_filter( 'the_content', 'wps_restrict_video_to_logged_in', 20 );В этом коде мы ищем iframe-теги с видео и заменяем их на сообщение для гостей. Если видео вставлены другим способом, потребуется адаптировать регулярное выражение.
3. Ограничение видео, добавленных через шорткод
Если видео выводятся через шорткод, проще прописать условие внутри функции шорткода:
function my_video_shortcode( $atts ) {
if ( ! is_user_logged_in() ) {
return '<p>Только для зарегистрированных пользователей. Пожалуйста, <a href="' . wp_login_url() . '">войдите</a>.</p>';
}
$video_url = esc_url( $atts['url'] ?? '' );
if ( empty( $video_url ) ) {
return '';
}
return '<video controls><source src="' . $video_url . '" type="video/mp4"></video>';
}
add_shortcode( 'restricted_video', 'my_video_shortcode' );Проверка результата после внедрения
- Откройте страницу товара в режиме инкогнито или выйдите из аккаунта — видео должны быть заменены на сообщение с предложением войти.
- Войдите под зарегистрированным пользователем — видео должны отображаться корректно.
- Проверьте все варианты вставки видео на сайте — iframe, встроенные HTML5-видео, шорткоды.
- Убедитесь, что не осталось обходных путей для просмотра видео без авторизации.
Частые ошибки и как их исправить
- Видео не скрываются для гостей: возможно, фильтр
the_contentне применяется к нужному месту, например, если видео выводится через кастомный шаблон. Решение — добавить проверку и ограничение именно в шаблон или через хуки, которые используются. - Регулярное выражение не заменяет все видео: если видео вставлены не через iframe, а через другие теги или скрипты, регулярное выражение нужно адаптировать, либо использовать другой способ ограничения.
- Пользователи видят только сообщение, даже после авторизации: проверьте, не кешируется ли страница для всех пользователей, отключите кеширование на этой странице или настройте исключения.
Практические советы по безопасности и производительности
- Не полагайтесь только на фронтенд-ограничения (например, CSS или JS скрытие), так как видео URL остаются доступными в исходном коде.
- Для защиты видео-файлов используйте приватные ссылки или храните видео на защищенных внешних серверах.
- Если видео хранятся локально, настройте
.htaccessили nginx для ограничения доступа по сессиям или рефереру. - Оптимизируйте регулярные выражения и фильтры, чтобы не снижать производительность сайта при большом количестве запросов.
- Для сложных сценариев используйте плагин типа Clearfy Pro, который позволяет гибко настраивать ограничения и оптимизацию.
Сравнение подходов к ограничению видео доступа в WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
PHP-фильтр the_content с заменой iframe | Простая реализация, работает без плагинов | Не подходит, если видео выводятся вне контента |
| Ограничение внутри шорткода | Контроль только над видео в шорткодах | Не охватывает видео, вставленные напрямую в редактор |
| Использование плагинов для ограничения контента | Расширенные возможности, гибкие настройки | Дополнительная нагрузка, возможна плата за лицензии |
| Настройка защиты сервером (например, .htaccess) | Надежная защита файлов | Сложнее в настройке, требует навыков администрирования |