Contact Form 7: как создать свой шорткод для формы в WordPress

Почему стоит создавать собственный шорткод для Contact Form 7

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

Создавая собственный шорткод, вы получаете возможность:

  • автоматически выбирать нужную форму по ID или имени;
  • добавлять к форме дополнительные параметры и атрибуты;
  • встраивать форму в сложную логику шаблонов;
  • обрабатывать данные до и после отправки;
  • упрощать повторное использование форм с уникальными настройками.

Давайте разберём, как реализовать такой функционал на практике.

Создание шорткода для Contact Form 7: базовый пример

Для начала создадим простой шорткод, который будет выводить форму Contact Form 7 по ID. В файле functions.php вашей темы или в отдельном плагине добавьте следующий код:

function contactform7ru_render_form_shortcode($atts) {
    $atts = shortcode_atts(array(
        'id' => '',
        'title' => false
    ), $atts, 'contactform7ru_form');

    if (empty($atts['id'])) {
        return '<p>Ошибка: не указан ID формы Contact Form 7.</p>';
    }

    if ($atts['title']) {
        $form_title = get_the_title($atts['id']);
        if ($form_title) {
            $output = '<h3>' . esc_html($form_title) . '</h3>';
        }
    } else {
        $output = '';
    }

    $output .= do_shortcode('[contact-form-7 id="' . intval($atts['id']) . '"]');

    return $output;
}
add_shortcode('contactform7ru_form', 'contactform7ru_render_form_shortcode');

Здесь мы определяем шорткод [contactform7ru_form id="123" title="true"], который принимает параметр id — ID формы Contact Form 7, и необязательный параметр title, который выводит заголовок формы перед самой формой.

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

Добавление кастомных параметров в форму Contact Form 7

Иногда нужно передать в форму динамические данные — например, ID товара, текущего пользователя или метку сессии, которые затем используются в письме или для логики обработки.

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

Расширим наш шорткод, чтобы передавать произвольные параметры в форму:

function contactform7ru_render_form_shortcode($atts) {
    $atts = shortcode_atts(array(
        'id' => '',
        'title' => false,
        'product_id' => '',
        'user_name' => ''
    ), $atts, 'contactform7ru_form');

    if (empty($atts['id'])) {
        return '<p>Ошибка: не указан ID формы Contact Form 7.</p>';
    }

    // Добавляем фильтр для динамической подстановки значений
    add_filter('contactform7_form_hidden_fields', function($hidden_fields) use ($atts) {
        if (!empty($atts['product_id'])) {
            $hidden_fields['product_id'] = sanitize_text_field($atts['product_id']);
        }
        if (!empty($atts['user_name'])) {
            $hidden_fields['user_name'] = sanitize_text_field($atts['user_name']);
        }
        return $hidden_fields;
    });

    $output = '';
    if ($atts['title']) {
        $form_title = get_the_title($atts['id']);
        if ($form_title) {
            $output .= '<h3>' . esc_html($form_title) . '</h3>';
        }
    }

    $output .= do_shortcode('[contact-form-7 id="' . intval($atts['id']) . '"]');

    // Удаляем фильтр, чтобы не влиять на другие формы
    remove_all_filters('contactform7_form_hidden_fields');

    return $output;
}
add_shortcode('contactform7ru_form', 'contactform7ru_render_form_shortcode');

Теперь при вызове шорткода можно передавать параметры, например:

[contactform7ru_form id="123" product_id="456" user_name="Иван" title="true"]

<

Чтобы форма воспринимала эти поля, в Contact Form 7 добавьте скрытые поля с именами product_id и user_name:

[hidden product_id]
[hidden user_name]

Далее эти значения можно использовать в письмах, например, в шаблоне письма добавить [product_id] и [user_name].

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

Если нужно выполнить дополнительную обработку данных из формы — например, записать в базу или отправить данные в CRM — можно подключить хук wpcf7_mail_sent.

Добавим пример обработчика, который будет логировать отправленные формы в отдельный файл:

function contactform7ru_log_form_submission($contact_form) {
    $submission = WPCF7_Submission::get_instance();
    if ($submission) {
        $data = $submission->get_posted_data();
        $log_entry = date('Y-m-d H:i:s') . ' - Форма ID: ' . $contact_form->id() . ' - Данные: ' . json_encode($data, JSON_UNESCAPED_UNICODE) . "\n";
        file_put_contents(__DIR__ . '/cf7_submissions.log', $log_entry, FILE_APPEND | LOCK_EX);
    }
}
add_action('wpcf7_mail_sent', 'contactform7ru_log_form_submission');

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

Полезные плагины для расширения Contact Form 7

Кроме создания собственного шорткода и фильтров, рекомендуем обратить внимание на следующие плагины, которые помогут расширить функционал Contact Form 7:

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

Эти расширения совместимы с нашим примером шорткода и помогут создать более мощные и удобные формы.

Советы по безопасности и производительности

При работе с формами обязательно учитывайте безопасность:

  • очищайте и валидируйте все входящие данные с помощью функций WordPress;
  • не вставляйте пользовательский ввод напрямую в HTML без экранирования;
  • используйте nonce и капчи для защиты от спама;
  • ограничивайте количество одновременных отправок, чтобы избежать нагрузки.

Также помните, что слишком большое количество фильтров и обработчиков может замедлить загрузку страниц с формами. Оптимизируйте код и используйте кэширование.

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

⭐⭐⭐⭐⭐
Contact Form 7: отладка и решение ошибок PHP в WordPress
13.11.2025
Contact Form 7: отправка данных через REST API WordPress
11.12.2025
Contact Form 7: Автозаполнение полей формы по геолокации пользователя
16.04.2026
Contact Form 7: автоответы и подтверждения отправки формы в WordPress
04.11.2025
Contact Form 7: как добавить проверку OTP (одноразовый пароль) для подтверждения формы
23.02.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙