wpforms.ru wordpress WPForms.ru

Как создать решение для массового сохранения ответов WPForms в базе данных WordPress

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

Почему стандартное сохранение ответов WPForms может быть недостаточным

По умолчанию WPForms хранит данные форм в своих таблицах, что удобно для базового управления, но не всегда подходит для сложных задач:

  • Отсутствие удобного доступа к данным через стандартные WP-запросы и API.
  • Ограничения по быстродействию при большом объеме собранных данных.
  • Сложности с интеграцией данных с внешними системами или кастомной логикой.

Для решения этих проблем можно реализовать собственный механизм массового сохранения и обработки ответов.

Создание собственной таблицы для хранения ответов WPForms

Первым шагом создадим отдельную таблицу в базе данных WordPress для хранения ответов форм. Это позволит структурировать данные по своим правилам и работать с ними максимально эффективно.

Добавим функцию для создания таблицы при активации плагина или темы:

function wpformsru_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpformsru_entries';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        form_id BIGINT(20) UNSIGNED NOT NULL,
        entry_data LONGTEXT NOT NULL,
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook( __FILE__, 'wpformsru_create_custom_table' );

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

Перехват отправки формы WPForms для сохранения данных

WPForms предоставляет удобный хук wpforms_process_complete, который срабатывает после успешной отправки формы. Используем его для сохранения данных в нашу таблицу.

function wpformsru_save_entry_to_custom_table( $fields, $entry, $form_data, $entry_id ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpformsru_entries';

    // Преобразуем поля в JSON для хранения
    $entry_json = wp_json_encode( $fields );

    $wpdb->insert(
        $table_name,
        [
            'form_id' => intval( $form_data['id'] ),
            'entry_data' => $entry_json,
            'created_at' => current_time( 'mysql' )
        ],
        [
            '%d',
            '%s',
            '%s'
        ]
    );
}
add_action( 'wpforms_process_complete', 'wpformsru_save_entry_to_custom_table', 10, 4 );

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

Вывод сохраненных ответов в административной панели WordPress

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

Пример добавления страницы меню и вывода данных:

function wpformsru_add_admin_menu() {
    add_menu_page(
        'WPFormsRU Entries',
        'WPFormsRU Entries',
        'manage_options',
        'wpformsru-entries',
        'wpformsru_render_entries_page'
    );
}
add_action( 'admin_menu', 'wpformsru_add_admin_menu' );

function wpformsru_render_entries_page() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpformsru_entries';

    $results = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY created_at DESC LIMIT 50" );

    echo '<div class="wrap"><h1>Сохранённые ответы WPForms</h1><table class="wp-list-table widefat fixed striped">';
    echo '<thead><tr><th>ID</th><th>Form ID</th><th>Данные</th><th>Дата</th></tr></thead><tbody>';

    foreach ( $results as $row ) {
        $data = json_decode( $row->entry_data, true );
        $formatted_data = '<ul>';
        foreach ( $data as $field ) {
            $formatted_data .= '<li>' . esc_html( $field['name'] ) . ': ' . esc_html( $field['value'] ) . '</li>';
        }
        $formatted_data .= '</ul>';

        echo '<tr>' .
             '<td>' . esc_html( $row->id ) . '</td>' .
             '<td>' . esc_html( $row->form_id ) . '</td>' .
             '<td>' . $formatted_data . '</td>' .
             '<td>' . esc_html( $row->created_at ) . '</td>' .
             '</tr>';
    }

    echo '</tbody></table></div>';
}

Это базовый пример, который можно расширять фильтрами, пагинацией и сортировкой.

Оптимизация и масштабирование решения для больших объемов данных

При росте количества ответов рекомендуется проработать следующие моменты:

  • Добавить индексы на полях, часто используемых для фильтрации (например, form_id и created_at).
  • Реализовать пагинацию и AJAX-загрузку в интерфейсе админки для снижения нагрузки.
  • Использовать WP Cron или внешние задачи для пакетной обработки и архивации старых данных.

С помощью этих подходов вы сможете создать надежное и масштабируемое решение для хранения и работы с ответами WPForms.

Дополнительные рекомендации и плагины для расширения функционала

Для еще более удобной работы с формами и их данными рекомендуем обратить внимание на плагины:

  • Expert Review — для создания расширенных обзоров и аналитики.
  • WPRemark — для управления отзывами и комментариями, которые можно связать с формами.

Их можно интегрировать с вашим кастомным решением для повышения эффективности.

Итог

Создание собственного механизма массового сохранения ответов WPForms в базе данных WordPress требует понимания работы с хуками плагина, базой данных и админкой WP. Предложенное решение позволит вам гибко управлять данными, масштабировать хранение и интегрировать формы с другими системами, не ограничиваясь стандартным функционалом WPForms.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше