WP Manifestindependent plugin directory
manifest / forms / cf7-org-fields

Contact Form 7 - Organization Fields

Добавляет поля для ввода реквизитов организаций (ИНН, ОГРН и др.)

by N1k0lay · github.com/n1k0lay/cf7-org-fields · website

0stars
0forks

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

  1. Скачайте ZIP-архив плагина
  2. Перейдите в ПлагиныДобавить новыйЗагрузить плагин
  3. Выберите ZIP-файл и нажмите Установить
  4. Активируйте плагин

Ручная установка

  1. Скопируйте папку cf7-org-fields в /wp-content/plugins/
  2. Активируйте плагин в админке WordPress

🎯 Использование

Добавление полей через генератор тегов

  1. Откройте форму в Contact Form 7
  2. Нажмите кнопку ИНН или КПП над редактором формы
  3. Настройте параметры поля и нажмите Вставить тег

Ручное добавление тегов

Поле ИНН

<!-- Обязательное поле ИНН -->
[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

Добавление нового поля

Для добавления нового поля организации (например, ОГРН):

  1. Создайте папку поля:

    fields/ogrn/
    ├── class-ogrn-field.php
    ├── assets/
    │   └── ogrn-validator.js
    └── rules/
        └── class-ogrn-validation-rule.php
  2. Создайте класс поля:

    <?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');
        }
    
        // Реализуйте абстрактные методы базового класса
    }
  3. Зарегистрируйте поле:

    // В 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

🤝 Участие в разработке

  1. Создайте форк проекта
  2. Создайте ветку для вашей функции (git checkout -b feature/amazing-feature)
  3. Зафиксируйте изменения (git commit -m 'Add amazing feature')
  4. Отправьте в ветку (git push origin feature/amazing-feature)
  5. Создайте Pull Request

📋 Roadmap

  • [ ] Добавление поля ОГРН
  • [ ] Добавление поля БИК
  • [ ] Добавление поля ОКТМО
  • [ ] Интеграция с API ФНС для проверки актуальности данных
  • [ ] Автокомплит организаций по ИНН
  • [ ] Экспорт валидированных данных

❓ FAQ

Q: Можно ли использовать несколько полей ИНН в одной форме? A: Да, просто дайте им разные имена: [inn inn-1] и [inn inn-2]

Q: Поддерживается ли валидация ИП? A: Да, для ИП используется 12-значный ИНН с соответствующей валидацией.

Q: Можно ли отключить клиентскую валидацию? A: JavaScript валидация автоматически отключается, если Contact Form 7 SWV недоступен.

🆘 Поддержка

Если у вас возникли вопросы или проблемы:

  1. Проверьте FAQ
  2. Создайте Issue
  3. Напишите на n1k0lay.ru