Contact Form 7 - Organization Fields
Добавляет поля для ввода реквизитов организаций (ИНН, ОГРН и др.)
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/n1k0lay/cf7-org-fields/archive/refs/heads/master.zipПлагин для WordPress, который добавляет поля для ввода реквизитов организаций в Contact Form 7 с полноценной валидацией по российским стандартам.
🚀 Возможности
- Поле ИНН - валидация 10/12-значных ИНН с проверкой контрольных сумм по ГОСТ Р 54616-2011
- Поле КПП - валидация 9-значного кода причины постановки на учет
- Клиентская валидация - мгновенная проверка в браузере без отправки формы
- Серверная валидация - дублирование проверок на сервере для безопасности
- Генератор тегов - удобное добавление полей через админку Contact Form 7
- Доступность - поддержка ARIA-атрибутов для пользователей с ограниченными возможностями
- Мобильная оптимизация - корректное отображение на мобильных устройствах
📋 Требования
- WordPress 5.0+
- PHP 7.4+
- Contact Form 7 5.0+
🧩 Совместимость и режимы работы
Плагин поддерживает две модели валидации в зависимости от версии Contact Form 7:
| Версия CF7 | Механизм | Возможности |
|---|---|---|
| >= 5.8 | SWV (Schema-based Validation) | Гранулярные правила inn_length, inn_zeros, inn_checksum, kpp_format, клиентская JS валидация через swv.validators |
| < 5.8 | Legacy hooks | Серверная валидация через фильтры wpcf7_validate_inn, wpcf7_validate_kpp с проверкой обязательности, длины/формата, нулей и контрольных сумм |
Fallback реализован автоматически: если класс WPCF7_SWV недоступен, плагин подключает резервную серверную валидацию и
не загружает SWV правила, предотвращая фатальные ошибки.
Рекомендуется использовать последнюю версию Contact Form 7 для расширенной валидации и лучшего UX.
💾 Установка
Через админку WordPress
- Скачайте ZIP-архив плагина
- Перейдите в
Плагины→Добавить новый→Загрузить плагин - Выберите ZIP-файл и нажмите
Установить - Активируйте плагин
Ручная установка
- Скопируйте папку
cf7-org-fieldsв/wp-content/plugins/ - Активируйте плагин в админке WordPress
🎯 Использование
Добавление полей через генератор тегов
- Откройте форму в Contact Form 7
- Нажмите кнопку ИНН или КПП над редактором формы
- Настройте параметры поля и нажмите
Вставить тег
Ручное добавление тегов
Поле ИНН
<!-- Обязательное поле ИНН -->
[inn* inn-field class:my-inn]
<!-- Необязательное поле ИНН -->
[inn inn-field placeholder "Введите ИНН"]
Поле КПП
<!-- Обязательное поле КПП -->
[kpp* kpp-field class:my-kpp]
<!-- Необязательное поле КПП -->
[kpp kpp-field placeholder "Введите КПП"]
Доступные атрибуты
class:класс- CSS класс для стилизацииid:идентификатор- HTML ID атрибутplaceholder- текст подсказки в полеreadonly- только для чтенияtabindex:число- порядок табуляции
Пример полной формы
<label>Название организации
[text* company-name]</label>
<label>ИНН организации
[inn* company-inn class:required-field]</label>
<label>КПП организации
[kpp company-kpp]</label>
<label>Ваше сообщение
[textarea* your-message]</label>
[submit "Отправить"]
🔧 Разработка
Структура проекта
cf7-org-fields/
├── cf7-org-fields.php # Главный файл плагина
├── fields/
│ ├── class-base-field.php # Базовый абстрактный класс
│ ├── class-field-manager.php # Менеджер регистрации полей
│ ├── inn/ # Поле ИНН
│ │ ├── class-inn-field.php
│ │ ├── assets/
│ │ │ └── inn-validator.js
│ │ └── rules/
│ │ ├── class-inn-checksum-rule.php
│ │ ├── class-inn-length-rule.php
│ │ └── class-inn-zeros-rule.php
│ └── kpp/ # Поле КПП
│ ├── class-kpp-field.php
│ ├── assets/
│ │ └── kpp-validator.js
│ └── rules/
│ └── class-kpp-format-rule.php
Добавление нового поля
Для добавления нового поля организации (например, ОГРН):
-
Создайте папку поля:
fields/ogrn/ ├── class-ogrn-field.php ├── assets/ │ └── ogrn-validator.js └── rules/ └── class-ogrn-validation-rule.php -
Создайте класс поля:
<?php require_once CF7_ORG_PLUGIN_DIR . 'fields/class-base-field.php'; class CF7_Org_OGRN_Field extends CF7_Org_Base_Field { public function __construct() { parent::__construct('ogrn', 'ogrn'); } // Реализуйте абстрактные методы базового класса } -
Зарегистрируйте поле:
// В cf7-org-fields.php require_once CF7_ORG_PLUGIN_DIR . 'fields/ogrn/class-ogrn-field.php'; $field_manager->register_field('CF7_Org_OGRN_Field');
Правила валидации
Каждое правило валидации должно:
- Наследоваться от
Contactable\SWV\Rule - Реализовывать методы
matches()иvalidate() - Находиться в пространстве имен
Contactable\SWV
Пример:
<?php
namespace Contactable\SWV;
class OGRNValidationRule extends Rule
{
const rule_name = 'ogrn_validation';
public function matches($context)
{
return !empty($context['text']);
}
public function validate($context)
{
$input = $this->get_default_input();
// Логика валидации ОГРН
return $this->validate_ogrn($input) ? true : $this->create_error();
}
}
📝 Алгоритмы валидации
ИНН (Идентификационный номер налогоплательщика)
10-значный ИНН (юридические лица):
- Контрольная сумма рассчитывается по коэффициентам:
[2,4,10,3,5,9,4,6,8] - Формула:
(Σ(цифра × коэффициент) mod 11) mod 10
12-значный ИНН (физические лица):
- 11-я цифра: коэффициенты
[7,2,4,10,3,5,9,4,6,8] - 12-я цифра: коэффициенты
[3,7,2,4,10,3,5,9,4,6,8]
КПП (Код причины постановки на учет)
- Формат:
NNNNCCNNNгде:NNNN- код налогового органа (4 цифры)CC- причина постановки (2 символа: цифры или буквы A-Z)NNN- порядковый номер (3 цифры)
🐛 Сообщения об ошибках
Плагин добавляет следующие сообщения об ошибках в Contact Form 7:
| Код | Сообщение по умолчанию |
|---|---|
invalid_inn_length |
"ИНН должен содержать 10 или 12 цифр." |
invalid_inn_zeros |
"ИНН не может состоять только из нулей." |
invalid_inn_checksum |
"Введен неверный ИНН. Проверьте правильность ввода." |
invalid_kpp_format |
"КПП должен состоять из 9 символов в формате NNNNCCNNN." |
Сообщения можно настроить в разделе Сообщения формы Contact Form 7.
🔒 Безопасность
- Все данные проходят валидацию на стороне сервера
- Входные данные очищаются от лишних символов
- Используются стандартные механизмы WordPress для экранирования вывода
🌍 Локализация
Плагин готов к переводу и содержит:
- Textdomain:
cf7-org-fields - Все строки вынесены в функции
__()и_e()
📄 Лицензия
GPL v2 или новее. См. файл LICENSE.
👨💻 Автор
N1k0lay
- Website: n1k0lay.ru
- GitHub: @N1k0lay
🤝 Участие в разработке
- Создайте форк проекта
- Создайте ветку для вашей функции (
git checkout -b feature/amazing-feature) - Зафиксируйте изменения (
git commit -m 'Add amazing feature') - Отправьте в ветку (
git push origin feature/amazing-feature) - Создайте Pull Request
📋 Roadmap
- [ ] Добавление поля ОГРН
- [ ] Добавление поля БИК
- [ ] Добавление поля ОКТМО
- [ ] Интеграция с API ФНС для проверки актуальности данных
- [ ] Автокомплит организаций по ИНН
- [ ] Экспорт валидированных данных
❓ FAQ
Q: Можно ли использовать несколько полей ИНН в одной форме?
A: Да, просто дайте им разные имена: [inn inn-1] и [inn inn-2]
Q: Поддерживается ли валидация ИП? A: Да, для ИП используется 12-значный ИНН с соответствующей валидацией.
Q: Можно ли отключить клиентскую валидацию? A: JavaScript валидация автоматически отключается, если Contact Form 7 SWV недоступен.
🆘 Поддержка
Если у вас возникли вопросы или проблемы:
- Проверьте FAQ
- Создайте Issue
- Напишите на n1k0lay.ru