WP Captcha Guard
Плагин WordPress, отдающий капчу с чекбоксом и невидимую со скорингом за одним интерфейсом: любая форма рисует и проверяет одинаково, а смена версии - это настройка. Ассеты грузятся по страницам, а зависимости переименовываются на сборке, поэтому конфликт с другими плагинами невозможен.

Стек
Проблема
Публичные формы на сайте WordPress (обратная связь, регистрация, всё, что отдаёт работу на бэкенд) начинают собирать ботов ровно с момента индексации. Обычный ответ - по плагину капчи на каждую форму, и у этого ответа есть цена: несколько плагинов тянут каждый свою копию скрипта вендора, каждый рисует поле по-своему, а переход с чекбокса на невидимую версию со скорингом означает замену их всех.
Есть и более тонкий сбой. Библиотеки капчи везут свои зависимости, и когда два плагина упаковывают разные версии одной библиотеки, PHP загружает ту, что оказалась первой, а вторая ломается - класс ошибок, который вылезает только на бою и в чужом плагине.
До → После
| До | После |
|---|---|
| Отдельный плагин капчи на каждую форму | Один компонент, который рисует и проверяет любая форма |
| Переход v2 → v3 означал замену интеграции | Версия - это настройка; обе реализуют один интерфейс |
| Каждый плагин грузит свою копию скрипта вендора | Скрипт и стили регистрируются один раз и подключаются там, где нужны |
| Упакованные зависимости конфликтуют с другими плагинами | Зависимости переименовываются на сборке: конфликт невозможен |
| Логика проверки скопирована между формами | Один путь проверки, одно место для правки |
Как это работает
- Один интерфейс, две реализации. Капча с чекбоксом и невидимая со скорингом стоят за одним контрактом, поэтому вызывающий код рисует поле и проверяет ответ, не зная, какая версия настроена.
- Версия - это конфигурация. Переключение между ними - правка настроек, а не переписывание интеграции: имя поля и вызов проверки с обеих сторон остаются прежними.
- Ассеты грузятся там, где используются. Скрипты и стили регистрируются централизованно и подключаются только на страницах, где капча реально рисуется, поэтому защищённая страница контактов не облагает налогом весь остальной сайт.
- Зависимости переименовываются на сборке. Сборка добавляет префикс пространствам имён упакованных библиотек, поэтому копия общей библиотеки из этого плагина не может столкнуться с другой версией из соседнего - именно этот сбой заставляет плагины капчи воевать между собой.
- Формы подключаются добровольно. Любая форма, ядра, WooCommerce или своя, рисует поле и спрашивает вердикт при отправке; ничего не вшивается в формы, которые владелец сайта не выбирал.
Основные возможности
- Капча с чекбоксом и невидимая со скорингом за одним интерфейсом
- Версия переключается настройкой без правок кода интеграции
- Централизованная регистрация скриптов и стилей с подключением по странице
- Переименование пространств имён зависимостей на сборке - без конфликтов плагинов
- Единый путь проверки, переиспользуемый из любой формы
- Типизированный объект настроек вместо разбросанных констант
Установка
- Загрузите папку плагина в
/wp-content/plugins/и активируйте - Введите site key и секрет из консоли провайдера капчи
- Выберите версию капчи - чекбокс или невидимая со скорингом
- Отрисуйте поле в своей форме и вызовите хелпер проверки при отправке
- Отправьте форму как обычный пользователь и убедитесь, что вердикт положительный
Открыт для работы по контракту
Я доступен для работы по контракту. Если у вас есть интересная идея проекта, запишитесь на звонок через Calendly.
Записаться на 30-минутный звонок