Головна/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

Надшвидка обробка заявок без зайвих плагінів: збереження у закритий CPT для аудиту, REST API обробник, невидима пастка Honeypot, миттєві сповіщення в Telegram Bot та асинхронний UX.

~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 сильно сповільнює сайт, постійно забивається спамом, а листи губляться в спамі. Потрібні легкі форми, які зберігають заявки в базі WordPress, миттєво надсилають деталі в чат менеджерів у Telegram та дублюють на пошту.
Ключевые требования:
  • •Закритий тип записів 'lead_entry' для гарантованого збереження заявок у базі даних WordPress
  • •Легка верстка форми з токеном захисту Nonce та невидимим полем-пасткою Honeypot
  • •Власний REST API маршрут /theme/v1/submit-lead із перевіркою даних та обмеженням частоти запитів
  • •Миттєва відправка сповіщення в Telegram через Telegram Bot API за допомогою функції wp_remote_post()
  • •Сучасний клієнтський JavaScript на Fetch API з анімацією очікування, обробкою помилок та модальним вікном успіху
Ограничения проекта:
  • •Нуль важких плагінів форм (без Contact Form 7, WPForms чи Gravity Forms)
  • •Безпечне зберігання токена Telegram-бота та ID чату в wp-config.php
  • •Відправка заявки не повинна затримувати роботу інтерфейсу (асинхронний режим)
Критерии приёмки (KPI):
  • Час відгуку під час відправки заявки < 350мс
  • Нуль спам-заявок завдяки пастці Honeypot
  • 100% заявок надійно фіксуються в базі сайту незалежно від збоїв поштових серверів чи Telegram

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

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

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

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

1
Этап 1 из 5

Крок 1: Реєстрація закритого CPT lead_entry для зберігання заявок

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

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

Зареєструйте CPT 'lead_entry' з public => false, show_ui => true, show_in_menu => true. Додайте кастомні колонки в таблицю записів: Ім'я, Телефон, Email, Статус та Дата заявки.

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

Встановіть publicly_queryable => false та exclude_from_search => true, щоб заявки ніколи не потрапили у відкритий доступ.

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

Удобная 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

Крок 2: Верстка форми заявки з Nonce та пасткою Honeypot

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

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

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

Крок 4: Відправка сповіщень у Telegram через wp_remote_post()

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

Крок 5: Клієнтський JavaScript: відправка без перезавантаження та UX статусів

~25 минЛегкий

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

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

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

Интеграция