Contact Form 7: динамические поля с помощью шорткодов и фильтров

Contact Form 7 — один из самых популярных плагинов для создания форм в WordPress. Часто возникает необходимость не просто отображать статичные поля, а создавать динамические поля, которые меняют содержание в зависимости от контекста, пользователя или других параметров. В этой статье мы подробно рассмотрим, как создавать динамические поля в Contact Form 7 с помощью шорткодов и фильтров, а также приведем практические примеры кода.

Что такое динамические поля в Contact Form 7 и зачем они нужны

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

В Contact Form 7 нет встроенного механизма для динамического изменения значений полей, но благодаря WordPress API и возможностям плагина мы можем реализовать это с помощью шорткодов и хуков.

Рассмотрим самые востребованные сценарии:

  • Подстановка параметров из URL в поля формы;
  • Загрузка списка значений из базы данных для селектов и чекбоксов;
  • Динамическое изменение placeholder и значений полей в зависимости от условий;
  • Использование пользовательских шорткодов для генерации содержимого в форме.

Использование шорткодов для динамического содержимого в Contact Form 7

Contact Form 7 поддерживает вставку шорткодов в описание и некоторые типы полей, но они не всегда автоматически выполняются. Для динамического вывода данных можно использовать фильтр wpcf7_form_elements, который позволяет обработать содержимое формы перед выводом.

Пример: создадим шорткод [cf7_user_ip], который выводит IP-адрес пользователя, и внедрим его в форму.

function contactform7_ru_user_ip_shortcode() {
    return $_SERVER['REMOTE_ADDR'] ?? '';
}
add_shortcode('cf7_user_ip', 'contactform7_ru_user_ip_shortcode');

function contactform7_ru_do_shortcode_in_form($content) {
    if (has_shortcode($content, 'cf7_user_ip')) {
        $content = do_shortcode($content);
    }
    return $content;
}
add_filter('wpcf7_form_elements', 'contactform7_ru_do_shortcode_in_form');

Теперь в любом текстовом поле формы можно написать [cf7_user_ip], и пользователю отобразится его IP-адрес. Это простой способ динамической подстановки.

Динамическая подстановка значений из URL в поля Contact Form 7

Очень часто нужно, чтобы форма автоматически подставляла значение из параметров GET-запроса, например, ?utm_source=google. Для этого используем скрытое поле и фильтр wpcf7_form_tag.

function contactform7_ru_populate_fields($tag) {
    if ($tag['name'] == 'utm_source') {
        $value = isset($_GET['utm_source']) ? sanitize_text_field($_GET['utm_source']) : '';
        $tag['values'] = [$value];
    }
    return $tag;
}
add_filter('wpcf7_form_tag', 'contactform7_ru_populate_fields');

В самой форме добавьте скрытое поле:

[hidden utm_source]

Теперь при загрузке страницы поле автоматически заполнится значением из URL. Аналогично можно подставлять другие параметры.

Расширенный пример: динамический список из базы данных

Предположим, нужно в форме вывести список категорий товаров из таблицы WordPress. Для этого используем фильтр wpcf7_form_tag и создадим поле типа select.

function contactform7_ru_dynamic_select($tag) {
    if ($tag['name'] != 'product_category') {
        return $tag;
    }

    global $wpdb;
    $categories = $wpdb->get_results("SELECT term_id, name FROM {$wpdb->prefix}terms JOIN {$wpdb->prefix}term_taxonomy ON {$wpdb->prefix}terms.term_id = {$wpdb->prefix}term_taxonomy.term_id WHERE taxonomy = 'product_cat' AND parent = 0");

    $options = [];
    foreach ($categories as $cat) {
        $options[] = $cat->name;
    }

    $tag['raw_values'] = $options;
    $tag['values'] = $options;

    return $tag;
}
add_filter('wpcf7_form_tag', 'contactform7_ru_dynamic_select');

В форме укажите:

[select product_category]

Список категорий будет загружаться автоматически. Это позволяет не менять форму вручную при добавлении новых категорий.

Как создавать динамические placeholder и значения полей

Иногда нужно изменить не только значение поля, но и его placeholder. Для этого можно использовать JavaScript, внедренный в форму. Contact Form 7 позволяет добавлять кастомные скрипты через хуки или в шаблоне темы.

function contactform7_ru_add_custom_script() {
    ?>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const inputPhone = document.querySelector('input[name="your-phone"]');
            if (inputPhone) {
                inputPhone.placeholder = 'Введите номер телефона в формате +7 (999) 999-99-99';
            }
        });
    </script>
    <?php
}
add_action('wp_footer', 'contactform7_ru_add_custom_script');

Так можно гибко управлять атрибутами полей, не меняя HTML формы.

Полезные плагины для расширения динамических возможностей Contact Form 7

Если хочется использовать готовые решения, обратите внимание на следующие плагины:

  • Contact Form 7 Dynamic Text Extension — позволяет добавлять динамические текстовые поля, подставлять значения из URL, кук и т.д.;
  • Contact Form 7 Conditional Fields — для создания условных полей, которые показываются или скрываются в зависимости от выбора пользователя;
  • Contact Form 7 to Database Extension — сохраняет отправленные формы в базу, что полезно при работе с динамическими данными.

Советы по отладке динамических полей и производительности

Работа с динамическими полями может влиять на скорость загрузки формы и корректность данных. Вот несколько рекомендаций:

  • Всегда фильтруйте и экранируйте пользовательские данные, особенно из URL и базы;
  • Минимизируйте количество запросов к базе при загрузке формы, кешируйте результаты при необходимости;
  • Проверяйте, что шорткоды и фильтры не конфликтуют с другими плагинами и темой;
  • Используйте встроенные возможности Contact Form 7, чтобы не ломать стандартный функционал;
  • Тестируйте формы на разных устройствах и браузерах, особенно если используете кастомный JavaScript.

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

⭐⭐⭐⭐⭐
Contact Form 7: как реализовать живую валидацию полей с кастомным JavaScript
23.03.2026
Contact Form 7 и полифил для старого браузера: как обеспечить работу форм в Internet Explorer
29.11.2025
Contact Form 7: универсальные хуки для расширения функциональности
11.01.2026
Contact Form 7: создание конкретных REST API эндпоинтов для отправки данных формы
26.04.2026
Contact Form 7: динамические поля с подгрузкой данных из JSON файла
10.04.2026
×
WordPress
дай сайту суперсилу!

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

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