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

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

Зачем создавать собственный шорткод для WPForms

Стандартный шорткод WPForms выглядит так:

[wpforms id="123"]

Он просто выводит форму с указанным ID. Но что, если вам нужно:

  • Динамически менять ID формы в зависимости от страницы или пользовательских условий.
  • Добавлять дополнительные атрибуты или стили к форме.
  • Интегрировать форму с другими функциями темы или плагинов.
  • Обрабатывать данные формы на лету или отслеживать отправки нестандартными способами.

В таких случаях собственный шорткод — отличный способ расширить возможности WPForms без изменения исходного кода плагина.

Создание собственного шорткода: шаг за шагом

Для начала добавим функцию, которая будет выводить форму WPForms с заданным ID, но при этом принимать дополнительные параметры. Допустим, мы хотим создать шорткод [wpform_custom id="123" message="Спасибо за отправку!"]

Регистрация шорткода в functions.php

Откройте файл functions.php вашей темы или подключите отдельный плагин для пользовательских функций. Добавьте следующий код:

function wpform_custom_shortcode($atts) {
    // Разбор атрибутов шорткода с установкой дефолтных значений
    $atts = shortcode_atts(
        array(
            'id' => '',
            'message' => '',
        ), $atts, 'wpform_custom'
    );

    // Проверяем, передан ли ID формы
    if (empty($atts['id'])) {
        return '<p>Ошибка: не указан ID формы WPForms.</p>';
    }

    // Выводим форму через стандартный шорткод WPForms
    $form_output = do_shortcode('[wpforms id="' . esc_attr($atts['id']) . '"]');

    // Если задано сообщение, добавляем его после формы
    if (!empty($atts['message'])) {
        $form_output .= '<div class="wpform-custom-message">' . esc_html($atts['message']) . '</div>';
    }

    return $form_output;
}
add_shortcode('wpform_custom', 'wpform_custom_shortcode');

Этот код регистрирует новый шорткод [wpform_custom], который принимает параметры id и message. Вы можете вставлять формы WPForms с дополнительным сообщением, которое будет показано после отправки.

Динамическое изменение ID формы в зависимости от условий

Иногда нужно выводить разные формы в зависимости от условий — например, от типа страницы, категории или роли пользователя. Для этого можно расширить функцию следующим образом:

function wpform_custom_shortcode_dynamic($atts) {
    $atts = shortcode_atts(
        array(
            'id' => '',
            'message' => '',
        ), $atts, 'wpform_custom'
    );

    $form_id = $atts['id'];

    // Пример: если пользователь авторизован, показываем форму с ID 123, иначе 456
    if (is_user_logged_in()) {
        $form_id = 123;
    } else {
        $form_id = 456;
    }

    $form_output = do_shortcode('[wpforms id="' . esc_attr($form_id) . '"]');

    if (!empty($atts['message'])) {
        $form_output .= '<div class="wpform-custom-message">' . esc_html($atts['message']) . '</div>';
    }

    return $form_output;
}
remove_shortcode('wpform_custom');
add_shortcode('wpform_custom', 'wpform_custom_shortcode_dynamic');

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

Добавление кастомных стилей и JavaScript для форм WPForms

Чтобы улучшить внешний вид и функциональность форм, можно подключать свои стили и скрипты. Например, добавим стили для блока сообщения после отправки формы:

function wpform_custom_enqueue_styles() {
    wp_enqueue_style('wpform-custom-style', get_stylesheet_directory_uri() . '/css/wpform-custom.css');
}
add_action('wp_enqueue_scripts', 'wpform_custom_enqueue_styles');

Создайте файл wpform-custom.css в папке css вашей темы и добавьте туда:

.wpform-custom-message {
    margin-top: 15px;
    padding: 10px;
    background-color: #e0ffe0;
    border: 1px solid #00aa00;
    border-radius: 4px;
    font-weight: bold;
    color: #007700;
}

Если нужно, можно добавить и JavaScript для интерактивности, например, скрывать сообщение через несколько секунд.

Плагины для расширения функционала WPForms с кастомными шорткодами

Для работы с WPForms и кастомными шорткодами можно использовать дополнительные плагины, которые облегчают интеграцию и расширяют возможности:

  • WPCode – Insert Headers and Footers + Custom PHP: позволяет добавлять PHP код для создания шорткодов безопасно, без правки functions.php.
  • Shortcode UI: добавляет удобный интерфейс для создания и управления шорткодами.
  • Code Snippets: позволяет управлять кастомным кодом, включая регистрацию шорткодов, прямо через админку WordPress.

Используя эти инструменты, вы можете создавать сложные шорткоды для WPForms без риска повредить сайт.

Советы по отладке и оптимизации пользовательских шорткодов

При создании собственных шорткодов для WPForms важно соблюдать несколько правил:

  • Всегда используйте shortcode_atts для обработки параметров, чтобы избежать ошибок.
  • Экранируйте вывод с помощью esc_attr и esc_html для безопасности.
  • Проверяйте, что указанный ID формы существует и форма опубликована.
  • Тестируйте шорткод в разных условиях — с разными параметрами, на разных страницах.
  • Используйте кэширование при большом количестве вызовов для повышения производительности.

Проверка существования формы

Чтобы убедиться, что форма с указанным ID действительно существует, можно добавить проверку через WPForms API:

function wpform_custom_shortcode_checked($atts) {
    $atts = shortcode_atts(array('id' => '', 'message' => ''), $atts, 'wpform_custom');
    $form_id = intval($atts['id']);

    if (!$form_id) {
        return '<p>Ошибка: не указан корректный ID формы.</p>';
    }

    // Проверяем наличие формы
    if (!class_exists('WPForms') || !WPForms()->form->get($form_id)) {
        return '<p>Ошибка: форма с ID ' . esc_html($form_id) . ' не найдена.</p>';
    }

    return do_shortcode('[wpforms id="' . esc_attr($form_id) . '"]');
}
remove_shortcode('wpform_custom');
add_shortcode('wpform_custom', 'wpform_custom_shortcode_checked');

Это поможет избежать вывода пустых или сломанных форм.

Как создать подключаемые поля в WPForms с применением хуков
27.01.2026
WPForms отладка проблем с переадресацией после отправки формы в WordPress
06.12.2025
WPForms и пользовательские метаданные: автоматизация обработки форм в WordPress
16.01.2026
WPForms: как создать многостраничную форму в WordPress
09.01.2026
WPForms и ответ на AJAX-запросы без перезагрузки страницы в WordPress
12.12.2025