Главная/WordPress Fullstack/Блупринты/Кастомные темы/Обработчик лид-форм без Contact Form 7 с сохранением в базу (CPT) и отправкой в Telegram / SMTP
К карточкам раздела «Кастомные темы»
Кастомные темы(ТЗ 28 из 54)
ТЗ: Обработчик лид-форм без Contact Form 7 с сохранением в базу (CPT) и отправкой в Telegram / SMTP
Кастомные темы5 шагов • +25 XP

ТЗ: Обработчик лид-форм без Contact Form 7 с сохранением в базу (CPT) и отправкой в Telegram / SMTP

Сверхбыстрая лидогенерация без комбайнов: валидация на сервере, защита от спам-ботов через Honeypot и таймстемп, сохранение заявок в закрытый CPT lead_entry и отправка в Telegram-чат по Webhook.

~8 ч работыУровень: MiddlePHP 8.3/8.4wp_remote_post()Telegram Bot APICustom Post Type (lead_entry)wp_nonce_field()Zero-JS Honeypotwp_mail()PHPMailer SMTP
+5 XP за шаг
Выполнено 0 из 5 шагов (0%)
Трудозатраты~8 рабочих часов
Фриланс вилка~$360 – $600 (€320 – €560)
Оценка веб-студии~$760 – $1,280 (€720 – €1200)

ТЗ заказчика (исходный бриф):

«Плагин Contact Form 7 сильно замедляет сайт, постоянно забивается спамом, а письма от клиентов иногда теряются в спам-фильтрах хостинга. Нужна нативная форма заявки в дизайне темы: отправка без перезагрузки страницы (AJAX), 100% защита от ботов без бесящей капчи, сохранение всех лидов в админке WordPress и моментальное уведомление менеджеров в рабочий Telegram-чат.»
Ключевые требования:
  • •Нативная AJAX-форма заявки (имя, телефон, комментарий, прикрепление файла/брифа)
  • •100% защита от ботов через невидимый Honeypot и таймстемп генерации формы
  • •Сохранение каждой заявки в кастомный тип записей «Заявки с сайта» (lead_entry) в админке
  • •Моментальная отправка сообщения в Telegram-чат с разметкой Markdown через Telegram Bot API
  • •Дублирование заявки на почту клиента через wp_mail() с авторизацией по SMTP
Ограничения проекта:
  • •Запрет на плагины Contact Form 7, WPForms, Ninja Forms
  • •Токен бота и chat_id должны быть защищены и не светиться в открытом клиентском коде
  • •Максимальное время выполнения скрипта отправки < 500 мс
Критерии приёмки (KPI):
  • 0 потерянных заявок (каждая заявка сохраняется в базу до отправки уведомлений)
  • 0 спам-сообщений без необходимости заставлять пользователя разгадывать капчу
  • Мгновенная доставка в Telegram (< 1 сек с момента клика по кнопке)

Конфигурация блупринта под условия проекта

Выберите архитектуру и стек — шаги роадмапа, структура файлов и примеры кода переключатся автоматически:

Пошаговое практическое руководство по ТЗ

Подробный разбор архитектуры, код реализации и советы эксперта по каждому этапу:

1
Этап 1 из 5

Регистрация закрытого CPT lead_entry для хранения заявок

~40 минСредний

Практическое руководство:

В functions.php зарегистрируйте кастомный тип записей lead_entry. Отключите публичный просмотр ("public" => false, "show_ui" => true), настройте кастомные колонки в таблице админки (Имя, Телефон, Дата, Статус обработки).

План и контрольные точки реализации:
1Зарегистрировать приватный CPT lead_entry
2Запретить создание заявок вручную через do_not_allow
3Добавить информативные колонки (Телефон, Страница, Дата)
Важные технические нюансы и подводные камни:

Укажите "capabilities" => ["create_posts" => "do_not_allow"], чтобы администраторы не могли случайно создать пустую заявку вручную кнопкой "Добавить".

Ожидаемый артефакт этапа:

Удобная CRM-система для учета лидов прямо в админке WordPress.

PHP
<?php
// inc/lead-cpt.php
declare(strict_types=1);

add_action('init', function (): void {
    register_post_type('lead_entry', [
        'labels' => [
            'name'               => 'Заявки с сайта',
            'singular_name'      => 'Заявка',
            'menu_name'          => 'Заявки',
            'all_items'          => 'Все заявки',
            'view_item'          => 'Просмотр заявки',
            'search_items'       => 'Искать заявки',
            'not_found'          => 'Заявок пока нет',
        ],
        'public'             => false,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'menu_icon'          => 'dashicons-email-alt',
        'supports'           => ['title'],
        'capabilities'       => [
            'create_posts' => 'do_not_allow',
        ],
        'map_meta_cap'       => true,
    ]);
});

// Кастомные колонки в таблице заявок
add_filter('manage_lead_entry_posts_columns', function (array $cols): array {
    return [
        'cb'         => $cols['cb'],
        'title'      => 'Клиент',
        'lead_phone' => 'Телефон',
        'lead_page'  => 'Страница захвата',
        'date'       => 'Дата поступления',
    ];
});

add_action('manage_lead_entry_posts_custom_column', function (string $col, int $post_id): void {
    if ($col === 'lead_phone') {
        echo esc_html((string) get_post_meta($post_id, '_lead_phone', true));
    }
    if ($col === 'lead_page') {
        echo esc_html((string) get_post_meta($post_id, '_lead_page', true));
    }
}, 10, 2);
2
Этап 2 из 5

Верстка формы заявки с Nonce и ловушкой Honeypot

~30 минЛегкий
3
Этап 3 из 5

Серверный REST API эндпоинт для обработки заявки

~40 минСредний
4
Этап 4 из 5

Отправка уведомлений в Telegram через wp_remote_post()

~35 минСредний
5
Этап 5 из 5

Клиентский JavaScript: отправка без перезагрузки и UX статусов

~25 минЛегкий

Типичные грабли на этом ТЗ

2 антипаттерна

Инструменты экосистемы Fullstack AI Lab для этого ТЗ

Интеграция