Почему важно сохранять данные Contact Form 7 в базу данных WordPress
Contact Form 7 — один из самых популярных плагинов для создания форм в WordPress. Однако по умолчанию все данные, отправленные через форму, приходят только на email, и никак не сохраняются в базе данных сайта. Это создает сложности при необходимости анализа или повторного использования ответов.
Хранение ответов в базе позволяет вести учет, создавать отчеты, интегрировать с другими системами и обеспечивает надежное хранение информации даже при проблемах с почтовым сервером.
В этой статье мы рассмотрим, как реализовать сохранение ответов Contact Form 7 в базу данных WordPress с помощью собственного кода и готовых плагинов.
Использование готовых плагинов для сохранения данных Contact Form 7
Существует несколько популярных плагинов, которые автоматически сохраняют отправленные формы Contact Form 7 в базу данных WordPress:
- Flamingo — разработан тем же автором, что и Contact Form 7. Очень простой и надежный. Сохраняет все отправленные данные, позволяет просматривать их в админке.
- Contact Form 7 Database Addon – CFDB7 — расширенный плагин с возможностями экспорта, фильтрации и отображения данных.
- Save Contact Form 7 — легкий плагин с базовым функционалом сохранения и управления записями.
Для большинства задач достаточно Flamingo. Чтобы установить его, перейдите в админке WordPress в раздел "Плагины" > "Добавить новый" и найдите Flamingo. После установки и активации все данные форм Contact Form 7 будут автоматически сохраняться.
Однако, если вам нужны нестандартные решения, например, сохранение только определенных полей или кастомная обработка, лучше реализовать это через код.
Как самостоятельно сохранить данные Contact Form 7 в базу данных через хук wpcf7_mail_sent
Создаем таблицу в базе данных для хранения ответов
Для начала создадим отдельную таблицу в базе данных WordPress, где будем сохранять данные из форм. Это поможет структурировать информацию и избежать конфликтов с другими таблицами.
function contactform7_ru_create_db_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'contactform7_ru_entries';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
form_id int(11) NOT NULL,
submitted_data longtext NOT NULL,
submit_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
add_action( 'after_switch_theme', 'contactform7_ru_create_db_table' );Данный код создаст таблицу с полями для ID записи, ID формы, сериализованных данных и времени отправки.
Сохраняем данные формы при отправке
Contact Form 7 предоставляет хук wpcf7_mail_sent, который вызывается после успешной отправки формы. Используем его для сохранения данных.
function contactform7_ru_save_form_data( $contact_form ) {
global $wpdb;
$submission = WPCF7_Submission::get_instance();
if ( ! $submission ) {
return;
}
$data = $submission->get_posted_data();
$form_id = $contact_form->id();
$table_name = $wpdb->prefix . 'contactform7_ru_entries';
// Сериализуем данные для хранения
$serialized_data = maybe_serialize( $data );
$wpdb->insert(
$table_name,
array(
'form_id' => $form_id,
'submitted_data' => $serialized_data,
'submit_time' => current_time( 'mysql' ),
),
array(
'%d',
'%s',
'%s'
)
);
}
add_action( 'wpcf7_mail_sent', 'contactform7_ru_save_form_data' );В этом коде мы получаем данные формы, сериализуем их и сохраняем в нашу таблицу. Такой подход универсален и позволяет сохранять любые поля формы.
Как вывести сохранённые данные в админке WordPress
Для удобства можно добавить в админ-панель страницу с таблицей, где будут отображаться сохранённые ответы.
function contactform7_ru_register_admin_page() {
add_menu_page(
'Ответы Contact Form 7',
'CF7 Ответы',
'manage_options',
'contactform7-ru-entries',
'contactform7_ru_display_entries',
'dashicons-feedback',
26
);
}
add_action( 'admin_menu', 'contactform7_ru_register_admin_page' );
function contactform7_ru_display_entries() {
global $wpdb;
$table_name = $wpdb->prefix . 'contactform7_ru_entries';
$results = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY submit_time DESC" );
echo '<div class="wrap"><h1>Ответы Contact Form 7</h1><table class="widefat fixed" cellspacing="0">';
echo '<thead><tr><th>ID</th><th>Форма ID</th><th>Данные</th><th>Дата отправки</th></tr></thead><tbody>';
if ( $results ) {
foreach ( $results as $row ) {
$data = maybe_unserialize( $row->submitted_data );
// Форматируем данные для удобного чтения
$formatted_data = '<ul>';
foreach ( $data as $key => $value ) {
if ( is_array( $value ) ) {
$value = implode(", ", $value);
}
$formatted_data .= "<li><strong>" . esc_html( $key ) . ":</strong> " . esc_html( $value ) . "</li>";
}
$formatted_data .= '</ul>';
echo '<tr>';
echo '<td>' . esc_html( $row->id ) . '</td>';
echo '<td>' . esc_html( $row->form_id ) . '</td>';
echo '<td>' . $formatted_data . '</td>';
echo '<td>' . esc_html( $row->submit_time ) . '</td>';
echo '</tr>';
}
} else {
echo '<tr><td colspan="4">Данные не найдены.</td></tr>';
}
echo '</tbody></table></div>';
}Этот код добавляет в меню WordPress пункт "CF7 Ответы", где в виде таблицы выводятся все сохранённые записи с понятным форматированием.
Рекомендации по безопасности и оптимизации
При работе с пользовательскими данными важно соблюдать меры безопасности:
- Используйте функции
esc_html(),esc_attr()и другие для экранирования вывода. - Ограничьте доступ к странице с ответами только для пользователей с правами администратора.
- При большом объёме данных подумайте о пагинации и фильтрации, чтобы не перегружать админку.
- Резервное копирование базы данных поможет избежать потери информации.
Для расширенного анализа можно интегрировать сохранённые данные с плагинами аналитики или CRM.
Заключение: когда использовать собственный код, а когда готовые решения
Если вам нужна простая и быстрая настройка — Flamingo или CFDB7 отлично подойдут. Для индивидуальных задач и дополнительной логики лучше использовать собственные решения на основе хука wpcf7_mail_sent.
Такой подход позволяет гибко сохранять данные, интегрировать их с другими сервисами и создавать удобный интерфейс для работы с ответами.
Подробнее о полезных плагинах для WordPress вы можете узнать на WPSHOP.ru.