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');
Это поможет избежать вывода пустых или сломанных форм.