Как сделать собственную функцию обработки формы в WordPress

|

В WordPress часто возникает необходимость создавать собственные формы для сбора данных от пользователей — будь то контактные формы, формы подписки, опросы или другие интерактивные элементы. В этой статье мы подробно разберем, как создавать и подключать собственную функцию обработки формы на стороне сервера, чтобы максимально гибко и безопасно работать с пользовательскими данными.

Почему стоит создавать собственную функцию обработки формы в WordPress

Стандартные плагины для форм, такие как Contact Form 7 или WPForms, отлично подходят для большинства задач, но иногда требуется тонкая настройка логики обработки, валидации или интеграция с нестандартными API. Собственная функция обработки позволяет:

Разумеется, это требует базового знания PHP и внутреннего устройства WordPress.

Как создать собственную функцию обработки формы: пошаговое руководство

1. Создаем HTML-форму

Начнем с простой HTML-формы, которая будет отправлять данные методом POST на текущую страницу. Например, форма обратной связи с полями «Имя», «Email» и «Сообщение».

<form method="post" action="">
  <label for="wpbusiness_name">Имя:</label>
  <input type="text" id="wpbusiness_name" name="wpbusiness_name" required>

  <label for="wpbusiness_email">Email:</label>
  <input type="email" id="wpbusiness_email" name="wpbusiness_email" required>

  <label for="wpbusiness_message">Сообщение:</label>
  <textarea id="wpbusiness_message" name="wpbusiness_message" required></textarea>

  <input type="hidden" name="wpbusiness_form_submitted" value="1">
  <input type="submit" value="Отправить">
</form>

Обратите внимание на скрытое поле wpbusiness_form_submitted — оно поможет определить, что форма была отправлена.

2. Обработка данных в functions.php

Теперь создадим функцию, которая будет обрабатывать данные после отправки, проверять их и выполнять необходимые действия, например, отправлять email или сохранять в базу.

function wpbusiness_handle_form_submission() {
  if ( ! empty($_POST['wpbusiness_form_submitted']) ) {
    // Проверяем nonce для безопасности (если используете)
    // sanitize входные данные
    $name    = sanitize_text_field($_POST['wpbusiness_name']);
    $email   = sanitize_email($_POST['wpbusiness_email']);
    $message = sanitize_textarea_field($_POST['wpbusiness_message']);

    // Валидация email
    if ( ! is_email($email) ) {
      echo '<p style="color:red;">Введите корректный email.</p>';
      return;
    }

    // Дополнительная валидация по необходимости
    if ( empty($name) || empty($message) ) {
      echo '<p style="color:red;">Пожалуйста, заполните все обязательные поля.</p>';
      return;
    }

    // Отправка email
    $to      = get_option('admin_email');
    $subject = 'Новое сообщение с сайта wpbusiness.ru';
    $headers = ['Content-Type: text/html; charset=UTF-8', 'From: ' . $name . ' <' . $email . '>'];
    $body    = '<strong>Имя:</strong> ' . esc_html($name) . '<br>' .
               '<strong>Email:</strong> ' . esc_html($email) . '<br>' .
               '<strong>Сообщение:</strong> <br>' . nl2br(esc_html($message));

    if ( wp_mail($to, $subject, $body, $headers) ) {
      echo '<p style="color:green;">Спасибо! Ваше сообщение отправлено.</p>';
    } else {
      echo '<p style="color:red;">Ошибка при отправке сообщения. Попробуйте позже.</p>';
    }
  }
}
add_action('wp_head', 'wpbusiness_handle_form_submission');

Обратите внимание, что мы используем функции WordPress для очистки и проверки данных: sanitize_text_field, sanitize_email, sanitize_textarea_field, а также функцию wp_mail для отправки письма.

3. Безопасность и защита от спама

Чтобы защитить форму от CSRF и спама, рекомендую использовать wp_nonce_field и проверять nonce при обработке формы:

// В форме добавьте
wp_nonce_field('wpbusiness_form_action', 'wpbusiness_form_nonce');

// В обработчике
if ( ! isset($_POST['wpbusiness_form_nonce']) || ! wp_verify_nonce($_POST['wpbusiness_form_nonce'], 'wpbusiness_form_action') ) {
  echo '<p style="color:red;">Ошибка безопасности. Попробуйте снова.</p>';
  return;
}

Для борьбы с ботами можно добавить простую капчу или использовать плагин типа Google Captcha (reCAPTCHA). Вручную можно добавить скрытое поле honeypot, которое должны заполнить только боты.

Как интегрировать собственную обработку формы с плагинами и темами

Часто форму нужно вывести в любом месте сайта — в записи, виджете или шаблоне темы. Для этого можно сделать шорткод с вызовом вашей функции формы и обработки:

function wpbusiness_form_shortcode() {
  ob_start();
  wpbusiness_handle_form_submission();
  ?>
  <form method="post" action="">
    <label for="wpbusiness_name">Имя:</label>
    <input type="text" id="wpbusiness_name" name="wpbusiness_name" required>

    <label for="wpbusiness_email">Email:</label>
    <input type="email" id="wpbusiness_email" name="wpbusiness_email" required>

    <label for="wpbusiness_message">Сообщение:</label>
    <textarea id="wpbusiness_message" name="wpbusiness_message" required></textarea>

    <?php wp_nonce_field('wpbusiness_form_action', 'wpbusiness_form_nonce'); ?>
    <input type="hidden" name="wpbusiness_form_submitted" value="1">
    <input type="submit" value="Отправить">
  </form>
  <?php
  return ob_get_clean();
}
add_shortcode('wpbusiness_form', 'wpbusiness_form_shortcode');

Теперь просто вставляйте шорткод [wpbusiness_form] в записи или страницы для вывода вашей формы с обработчиком.

Примеры полезных плагинов для расширения обработки форм в WordPress

Если хотите расширить функциональность, можно подключить следующие плагины, которые хорошо сочетаются с собственными формами:

Используя собственную функцию обработки вместе с этими плагинами, вы получите надежный, гибкий и безопасный инструмент для взаимодействия с посетителями сайта.

Заключение по созданию собственной функции обработки формы в WordPress

Создание собственной функции обработки формы — это мощный способ контролировать процесс приема данных и адаптировать его под любые бизнес-задачи. Главное — внимательно относиться к безопасности и валидации, использовать встроенные функции WordPress и соблюдать лучшие практики. Надеюсь, приведенный пример поможет вам быстро реализовать собственное решение и интегрировать его в ваш сайт на wpbusiness.ru.

Как автоматизировать отправку email-уведомлений об обновлениях в WordPress
30.01.2026
Автоматическое создание и удаление черновиков в WordPress через CRON
22.01.2026
Как автоматизировать удаление старых черновиков в WordPress: практическое руководство с примерами кода
19.03.2026
Как автоматизировать управление пользователями в WordPress с подробными примерами кода
06.04.2026
Как автоматизировать отзывы и оценки в WordPress для бизнес-сайта
14.01.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙