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

Contact Form 7 - Organization Fields

★ 0stars
1.0.1latest · 1 year ago

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/n1k0lay/cf7-org-fields/archive/refs/heads/master.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Плагин для 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

Releases

2 releases.

Tag
Published
1.0.1 latest
Oct 13, 2025 1 year ago
Oct 9, 2025 1 year ago

These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.