В WordPress часто возникает необходимость создавать собственные формы для сбора данных от пользователей — будь то контактные формы, формы подписки, опросы или другие интерактивные элементы. В этой статье мы подробно разберем, как создавать и подключать собственную функцию обработки формы на стороне сервера, чтобы максимально гибко и безопасно работать с пользовательскими данными.
Почему стоит создавать собственную функцию обработки формы в WordPress
Стандартные плагины для форм, такие как Contact Form 7 или WPForms, отлично подходят для большинства задач, но иногда требуется тонкая настройка логики обработки, валидации или интеграция с нестандартными API. Собственная функция обработки позволяет:
- Контролировать весь процесс приема, валидации и сохранения данных.
- Интегрировать форму с любыми сторонними сервисами по своему усмотрению.
- Обеспечивать высокую безопасность, минимизируя риски SQL-инъекций и XSS.
- Оптимизировать нагрузку, избегая избыточных функций плагинов.
Разумеется, это требует базового знания 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
Если хотите расширить функциональность, можно подключить следующие плагины, которые хорошо сочетаются с собственными формами:
- Contact Form 7 – легкий плагин с поддержкой AJAX и валидации;
- Fluent Forms – расширенные возможности построения форм с визуальным конструктором;
- WP Mail SMTP – для надежной отправки почты через SMTP-серверы;
- Advanced Custom Fields (ACF) – если нужно связать форму с произвольными полями в WordPress;
- Wordfence Security – для защиты сайта, включая формы, от атак.
Используя собственную функцию обработки вместе с этими плагинами, вы получите надежный, гибкий и безопасный инструмент для взаимодействия с посетителями сайта.
Заключение по созданию собственной функции обработки формы в WordPress
Создание собственной функции обработки формы — это мощный способ контролировать процесс приема данных и адаптировать его под любые бизнес-задачи. Главное — внимательно относиться к безопасности и валидации, использовать встроенные функции WordPress и соблюдать лучшие практики. Надеюсь, приведенный пример поможет вам быстро реализовать собственное решение и интегрировать его в ваш сайт на wpbusiness.ru.