Contact Form 7: как добавить ответы из формы в базу данных WordPress

Почему важно сохранять данные 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.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Contact Form 7: как добавить поле для загрузки файлов в форму WordPress
26.11.2025
Contact Form 7 и отправка данных в 1С через Webhook: практическое руководство
08.02.2026
Contact Form 7 и WooCommerce: автоматизация обработки заявок с примерами кода
11.05.2026
Contact Form 7 и Jetpack формы в WordPress: практическое руководство по интеграции и настройке
02.12.2025
Contact Form 7: как настроить и изменить заголовки email для отправки писем
01.03.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙