Почему важна автоматическая обработка ответов Contact Form 7
Contact Form 7 — один из самых популярных плагинов для создания форм обратной связи в WordPress. Однако по умолчанию он лишь отправляет данные на email, не сохраняя их в базе данных сайта. Это ограничение создаёт неудобства, если нужно вести учет отправленных заявок, анализировать данные или использовать их для последующей обработки.
Автоматическая обработка и сохранение ответов решает эту проблему: все данные из форм сохраняются в базе WordPress или внешних сервисах, что упрощает работу с заявками, автоматизацию и интеграцию с CRM.
Далее рассмотрим основные способы реализации автоматической обработки и сохранения ответов Contact Form 7 с примерами плагинов и кода.
Плагины для автоматического сохранения ответов Contact Form 7
Flamingo — простой и надёжный плагин для сохранения сообщений
Flamingo разработан авторами Contact Form 7 и позволяет сохранять все отправленные формы прямо в базу WordPress. Это отличный вариант, если нужна базовая фиксация данных без сложных настроек.
- Устанавливаете и активируете Flamingo.
- Все новые отправленные формы появятся в разделе "Flamingo → Inbox".
- Можно просматривать, фильтровать и экспортировать данные.
Flamingo работает автоматически и не требует дополнительного кода.
Contact Form 7 Dynamic Text Extension и интеграция с WPShop
Для расширения функционала Contact Form 7 можно использовать Contact Form 7 Dynamic Text Extension, который позволяет динамически подставлять значения в поля и интегрировать с внешними сервисами.
Например, можно автоматически подставлять текущую дату, ID пользователя или UTM-метки, а затем сохранять эти данные вместе с формой.
Как программно сохранять ответы Contact Form 7 в таблицу WordPress
Если нужны кастомные решения или интеграция с собственной базой данных, можно использовать хук wpcf7_mail_sent, который срабатывает после успешной отправки формы.
Пример функции для сохранения данных формы в пользовательскую таблицу WordPress:
function contactform7ru_save_form_data($contact_form) {
global $wpdb;
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$data = $submission->get_posted_data();
// Предположим, что в форме есть поля 'your-name' и 'your-email'
$name = isset($data['your-name']) ? sanitize_text_field($data['your-name']) : '';
$email = isset($data['your-email']) ? sanitize_email($data['your-email']) : '';
$table_name = $wpdb->prefix . 'contactform7ru_submissions';
$wpdb->insert($table_name, [
'name' => $name,
'email' => $email,
'submitted_at' => current_time('mysql')
]);
}
add_action('wpcf7_mail_sent', 'contactform7ru_save_form_data');Для этого сначала нужно создать таблицу в базе данных, например, через функцию активации плагина или темы:
function contactform7ru_create_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'contactform7ru_submissions';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name tinytext NOT NULL,
email varchar(100) NOT NULL,
submitted_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'contactform7ru_create_table');Такой подход даёт полную свободу для обработки и хранения данных.
Автоматическая отправка данных из Contact Form 7 в сторонние сервисы
Интеграция с Google Sheets через REST API
Можно настроить Contact Form 7 так, чтобы данные автоматически отправлялись в Google Sheets. Это удобно для совместного доступа и аналитики.
Пример простого кода для отправки данных в Google Sheets через вебхуки:
function contactform7ru_send_to_google_sheets($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$data = $submission->get_posted_data();
$body = json_encode([
'name' => $data['your-name'],
'email' => $data['your-email'],
'message' => $data['your-message']
]);
wp_remote_post('https://hooks.zapier.com/hooks/catch/xxx/yyy/', [
'headers' => ['Content-Type' => 'application/json'],
'body' => $body
]);
}
add_action('wpcf7_mail_sent', 'contactform7ru_send_to_google_sheets');Вместо Zapier можно использовать любой другой сервис с API или свой сервер для обработки.
Использование плагина WPForms для расширенной автоматизации
Если функционала Contact Form 7 недостаточно, можно рассмотреть WPForms — удобный конструктор форм с мощными интеграциями и автоматизацией. WPForms предлагает:
- Сохранение всех заявок в админке.
- Интеграцию с CRM, email-маркетингом, платежными системами.
- Простую настройку уведомлений и автозаполнения.
Для WordPress с Contact Form 7 это не замена, а альтернатива, если нужна более глубокая автоматизация.
Обработка и фильтрация данных Contact Form 7 перед сохранением
Иногда важно не просто сохранить данные, а проверить или модифицировать их перед этим. Для этого можно использовать фильтры и хуки Contact Form 7.
Пример проверки и очистки поля email перед сохранением:
function contactform7ru_validate_email_field($result, $tag) {
$name = $tag->name;
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = $submission->get_posted_data();
if ($name === 'your-email') {
$email = isset($data[$name]) ? $data[$name] : '';
if (!is_email($email)) {
$result->invalidate($tag, 'Неверный формат email');
}
}
}
return $result;
}
add_filter('wpcf7_validate_email*', 'contactform7ru_validate_email_field', 20, 2);Такой подход позволяет кастомизировать валидацию и обеспечивать высокое качество данных.
Вывод и управление сохранёнными ответами в админке WordPress
Если вы сохраняете данные в своей таблице, полезно реализовать страницу в админке для просмотра и управления заявками.
Пример создания простого меню и страницы в админке:
function contactform7ru_admin_menu() {
add_menu_page('CF7 Ответы', 'CF7 Ответы', 'manage_options', 'contactform7ru_submissions', 'contactform7ru_render_admin_page');
}
add_action('admin_menu', 'contactform7ru_admin_menu');
function contactform7ru_render_admin_page() {
global $wpdb;
$table_name = $wpdb->prefix . 'contactform7ru_submissions';
$results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY submitted_at DESC");
echo '<div class="wrap"><h1>Отправленные формы Contact Form 7</h1><table class="widefat"><thead><tr><th>ID</th><th>Имя</th><th>Email</th><th>Дата</th></tr></thead><tbody>';
foreach ($results as $row) {
echo "<tr><td>{$row->id}</td><td>" . esc_html($row->name) . "</td><td>" . esc_html($row->email) . "</td><td>{$row->submitted_at}</td></tr>";
}
echo '</tbody></table></div>';
}Так вы получаете простой и удобный интерфейс для просмотра заявок без почтового клиента.