WPForms — один из самых популярных плагинов для создания форм в WordPress. Часто возникает задача не просто собрать данные от пользователя, но и автоматически подставить в форму информацию из других плагинов, например, метаданные пользователя, данные корзины WooCommerce, или внешних API. В этой статье разберём, как динамически получать и использовать такие данные в WPForms с помощью PHP и JavaScript.
Почему важно интегрировать WPForms с другими источниками данных
Большинство сайтов используют несколько плагинов для расширения функционала. Например, интернет-магазин на WooCommerce хранит корзину и данные пользователя, а плагин пользовательских профилей — дополнительные поля. Чтобы не заставлять пользователя вводить одни и те же данные несколько раз, стоит автоматически подставлять их в формы WPForms. Это повышает удобство и снижает ошибки.
Кроме того, интеграция с внешними API позволяет подгружать актуальную информацию, например, курсы валют, адреса из геосервисов, список городов, и многое другое, что невозможно реализовать вручную.
WPForms предлагает удобные хуки и фильтры для динамического изменения полей и заполнения значений, а также гибкие методы для отправки и обработки данных. Ниже рассмотрим конкретные примеры.
Как динамически подставлять данные из других плагинов в поля WPForms
Получение данных пользователя из профиля WordPress
Предположим, вы хотите автоматически подставлять имя и email авторизованного пользователя в форму обратной связи.
add_filter('wpforms_field_value_wpforms_ru_name', 'wpforms_ru_fill_user_name', 10, 3);
function wpforms_ru_fill_user_name($value, $field_id, $form_data) {
if (is_user_logged_in()) {
$current_user = wp_get_current_user();
return $current_user->display_name;
}
return $value;
}
add_filter('wpforms_field_value_wpforms_ru_email', 'wpforms_ru_fill_user_email', 10, 3);
function wpforms_ru_fill_user_email($value, $field_id, $form_data) {
if (is_user_logged_in()) {
$current_user = wp_get_current_user();
return $current_user->user_email;
}
return $value;
}
Здесь мы используем фильтры wpforms_field_value_* для подстановки значений в поля с параметром Default Value -> Dynamic Population, где ключ динамической подстановки — wpforms_ru_name и wpforms_ru_email. В настройках поля укажите эти ключи, чтобы динамически заполнить поля.
Подстановка данных из WooCommerce (например, данные корзины)
Если у вас интернет-магазин на WooCommerce, можно подставлять сумму корзины или список товаров прямо в форму WPForms.
add_filter('wpforms_field_value_wpforms_ru_cart_total', 'wpforms_ru_fill_cart_total', 10, 3);
function wpforms_ru_fill_cart_total($value, $field_id, $form_data) {
if (class_exists('WC_Cart') && WC()->cart) {
return WC()->cart->get_cart_total(); // возвращает сумму в html формате
}
return $value;
}
Таким образом, поле с динамической подстановкой wpforms_ru_cart_total будет показывать актуальную сумму корзины при открытии формы.
Интеграция WPForms с внешними API для динамического заполнения
Пример: получение списка городов из внешнего API
Допустим, у вас есть API, возвращающий список городов в JSON, и вы хотите заполнить поле select в форме WPForms.
WPForms не поддерживает динамическое заполнение select напрямую через PHP, но можно использовать JavaScript для этого.
add_action('wp_footer', 'wpforms_ru_load_cities_js');
function wpforms_ru_load_cities_js() {
if (!is_page() || !function_exists('wpforms')) return;
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
var select = document.querySelector('select[name="wpforms[fields][123]"]'); // замените 123 на ID поля
if (!select) return;
fetch('https://example.com/api/cities')
.then(response => response.json())
.then(data => {
data.cities.forEach(city => {
var option = document.createElement('option');
option.value = city.id;
option.text = city.name;
select.appendChild(option);
});
})
.catch(error => console.error('Ошибка загрузки городов:', error));
});
</script>
<?php
}
В этом примере JavaScript загружает список городов и добавляет их в select поле при загрузке страницы. Важно указать правильный name поля и endpoint API.
Получение данных через AJAX и обновление полей
Если нужно менять поля формы в зависимости от выбора пользователя, можно использовать AJAX-запросы к серверу через wp-admin/admin-ajax.php.
Пример: при выборе страны подгрузить список городов.
add_action('wp_ajax_wpforms_ru_get_cities', 'wpforms_ru_get_cities_callback');
add_action('wp_ajax_nopriv_wpforms_ru_get_cities', 'wpforms_ru_get_cities_callback');
function wpforms_ru_get_cities_callback() {
$country = sanitize_text_field($_POST['country']);
// Тут вызываем API или получаем города из БД по стране
$cities = [];
if ($country === 'ru') {
$cities = [ ['id' => '1', 'name' => 'Москва'], ['id' => '2', 'name' => 'Санкт-Петербург'] ];
}
wp_send_json_success($cities);
}
JavaScript для отправки AJAX-запроса:
document.querySelector('select[name="wpforms[fields][country]"]').addEventListener('change', function() {
var country = this.value;
fetch('<?php echo admin_url('admin-ajax.php'); ?>', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: 'action=wpforms_ru_get_cities&country=' + country
})
.then(res => res.json())
.then(data => {
if (data.success) {
var citySelect = document.querySelector('select[name="wpforms[fields][city]"]');
citySelect.innerHTML = '';
data.data.forEach(function(city) {
var opt = document.createElement('option');
opt.value = city.id;
opt.text = city.name;
citySelect.appendChild(opt);
});
}
});
});
Обработка и сохранение данных из других источников вместе с WPForms
Иногда нужно не только подставить данные в форму, но и сохранить или обработать их вместе с ответами. WPForms предоставляет хук wpforms_process_complete для действий после отправки формы.
add_action('wpforms_process_complete', 'wpforms_ru_process_external_data', 10, 4);
function wpforms_ru_process_external_data($fields, $entry, $form_data, $entry_id) {
// Например, получить дополнительные данные из другого плагина
$custom_data = get_user_meta(get_current_user_id(), 'custom_field', true);
// Сохранить их в мета данных записи формы
update_post_meta($entry_id, '_wpforms_custom_data', $custom_data);
}
Так можно расширять стандартный функционал WPForms, интегрируя данные из разных источников.
Рекомендации и плагины для расширения интеграций WPForms
Для упрощения интеграций стоит рассмотреть плагины, которые расширяют WPForms или добавляют API-интерфейсы:
- WPForms Webhooks — позволяет отправлять данные форм на внешние URL;
- Clearfy Pro — оптимизирует работу WordPress и совместимость плагинов;
- WPGPT для автоматической генерации контента на основе данных из форм;
- Custom интеграции через
functions.phpили собственные плагины.
Использование этих инструментов позволит создавать более мощные и удобные формы с динамическим наполнением и обработкой.