Contact Form 7 — один из самых популярных плагинов для создания форм в WordPress, но стандартный функционал не всегда покрывает задачи по динамическому заполнению полей из базы данных сайта. В этой статье разберём, как создавать динамические поля в Contact Form 7 и подгружать в них данные из пользовательской таблицы WordPress или других источников.
Зачем нужны динамические поля в Contact Form 7
Стандартные поля Contact Form 7 — это статичные элементы, которые задаются вручную через интерфейс. Но часто требуется, чтобы:
- в выпадающем списке отображались категории товаров, которые обновляются автоматически;
- в форму подставлялись данные пользователя или другие данные из базы;
- формы адаптировались под контекст страницы или пользователя.
Реализовать это можно с помощью хука для добавления шорткодов и кастомных функций PHP, которые будут генерировать нужные значения.
Создание шорткода для динамического поля Contact Form 7
Contact Form 7 поддерживает использование шорткодов в значениях полей. Чтобы создать динамическое поле, создадим PHP-функцию с префиксом cf7ru_ и зарегистрируем её как шорткод в WordPress.
<?php
// Регистрируем шорткод [cf7ru_dynamic_select]
function cf7ru_dynamic_select_func() {
global $wpdb;
// Пример: получим список категорий из таблицы wp_terms
$results = $wpdb->get_results("SELECT term_id, name FROM {$wpdb->terms} ORDER BY name ASC");
if (empty($results)) {
return ''; // Нет данных
}
$options = '';
foreach ($results as $row) {
$options .= sprintf('<option value="%d">%s</option>', esc_attr($row->term_id), esc_html($row->name));
}
// Возвращаем HTML select с опциями
return '<select name="your-category">' . $options . '</select>';
}
add_shortcode('cf7ru_dynamic_select', 'cf7ru_dynamic_select_func');
?>
В коде выше мы формируем элемент <select> с опциями из категорий WordPress. Теперь в Contact Form 7 можно вставить шорткод [cf7ru_dynamic_select] и получить выпадающий список с категориями.
Используем динамическое поле в Contact Form 7
В редакторе формы Contact Form 7 добавьте поле:
[html dynamic-category-select] [cf7ru_dynamic_select][/html]
Здесь тег [html] позволяет вставить произвольный HTML — наш выпадающий список с динамическими данными.
А для обработки выбранного значения в письме используйте тег [your-category], соответствующий атрибуту name в <select>.
Динамическое автозаполнение текстового поля
Кроме селектов можно подставлять и другие типы полей, например, автозаполнение поля с именем пользователя, если он авторизован:
function cf7ru_autofill_username() {
if (is_user_logged_in()) {
$user = wp_get_current_user();
return esc_html($user->display_name);
}
return '';
}
add_shortcode('cf7ru_username', 'cf7ru_autofill_username');
В Contact Form 7 вставьте такой шорткод в текстовое поле:
[text* your-name default:"[cf7ru_username]"]
Это позволит автоматически подставить имя пользователя в форму, если он вошел на сайт.
Обработка динамических данных при отправке формы
Если нужно дополнительно обработать или сохранить данные из динамических полей, используйте хук wpcf7_before_send_mail. Например, сохраним выбранную категорию в мета данных заявки:
function cf7ru_save_category_meta($contact_form) {
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = $submission->get_posted_data();
if (!empty($data['your-category'])) {
// Здесь можно сохранить данные, например, в пользовательские мета или в таблицу
// update_post_meta($submission_post_id, '_selected_category', sanitize_text_field($data['your-category']));
}
}
}
add_action('wpcf7_before_send_mail', 'cf7ru_save_category_meta');
Дополнительные плагины для расширения Contact Form 7
Для работы с динамическими полями и интеграции Contact Form 7 с базой данных удобно использовать следующие плагины:
- Contact Form 7 – Dynamic Text Extension — позволяет создавать динамические поля с помощью шорткодов;
- Contact Form 7 to Database Extension — сохраняет отправленные данные в базу для дальнейшего анализа;
- Clearfy Pro — оптимизирует работу WordPress и Contact Form 7, помогает убрать лишние скрипты и улучшить производительность.
Советы по безопасности при работе с динамическими данными
Подгружая данные из базы и выводя их в форму, обязательно обрабатывайте и экранируйте данные для предотвращения XSS и SQL-инъекций. Используйте функции WordPress, такие как esc_html(), esc_attr(), и prepare() для запросов к базе.
Кроме того, проверяйте права пользователя, если данные чувствительные, чтобы не раскрывать лишнюю информацию.
Вывод
Динамические поля в Contact Form 7 позволяют создавать гибкие и адаптивные формы. С помощью собственных шорткодов и хуков можно подгружать данные из базы WordPress, автоматически заполнять поля и обрабатывать полученную информацию. Такой подход расширяет возможности плагина и помогает создавать удобные формы под любые задачи.