При разработке сайтов на WordPress часто возникает задача добавить в форму выбора поле со списком, которые значения которого меняются динамически в зависимости от контекста. Например, это может быть список категорий, тегов, пользователей или даже индивидуальные данные из базы. В этой статье мы подробно рассмотрим, как создать такой выбор поля в форме WordPress, используя нативные функции и примеры кода.
Зачем нужен динамический выбор поля в форме WordPress
Статические списки в формах ограничивают функциональность и удобство пользователей. Если значения меняются, приходится изменять код или настройки вручную. Динамические поля позволяют автоматизировать этот процесс, подгружая актуальные данные из базы WordPress. Это полезно при создании форм обратной связи, фильтров, настроек плагинов и других интерактивных элементов.
Например, вам нужно вывести в форме список категорий блога, чтобы пользователь мог выбрать интересующую тематику. Если категории добавятся или удалятся, список будет обновляться автоматически.
Другой пример — выбор пользователя из списка всех зарегистрированных аккаунтов, что бывает нужно в административных формах или при создании кастомных систем.
Пример 1. Создание выпадающего списка категорий в форме
Рассмотрим базовый пример создания select с категориями. Сначала получим категории с помощью функции WordPress get_categories(), затем выведем их в теге <select>.
function wpassist_get_categories_select() {
$categories = get_categories(array('hide_empty' => false));
$html = '<select name="wpassist_category">';
foreach ($categories as $category) {
$html .= '<option value="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</option>';
}
$html .= '</select>';
return $html;
}Вы можете использовать эту функцию в любом месте, например, в шорткоде или в шаблоне, чтобы вывести динамическое поле выбора категорий.
Пример использования в шорткоде
function wpassist_category_select_shortcode() {
return wpassist_get_categories_select();
}
add_shortcode('wpassist_category_select', 'wpassist_category_select_shortcode');Теперь, вставив в пост или страницу [wpassist_category_select], вы получите форму с динамическим списком категорий.
Пример 2. Выбор пользователя из базы WordPress
Иногда требуется вывести список пользователей для выбора в форме, например, для назначения ответственного лица или подписки. Для этого используем функцию get_users():
function wpassist_get_users_select() {
$users = get_users(array('orderby' => 'display_name'));
$html = '<select name="wpassist_user">';
foreach ($users as $user) {
$html .= '<option value="' . esc_attr($user->ID) . '">' . esc_html($user->display_name) . '</option>';
}
$html .= '</select>';
return $html;
}Этот код формирует выбор из всех пользователей, отсортированных по имени. Аналогично можно создать шорткод или вызвать функцию в шаблоне.
Обработка данных из динамического поля в форме
Вывод формы — это лишь половина задачи. Важно корректно обработать отправленные данные. Пример на основе обработки выбора категории в обработчике формы:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['wpassist_category'])) {
$category_id = intval($_POST['wpassist_category']);
// Проверяем, существует ли категория
$category = get_category($category_id);
if ($category && !is_wp_error($category)) {
// Можно выполнить нужные действия с выбранной категорией
echo 'Вы выбрали категорию: ' . esc_html($category->name);
} else {
echo 'Выбрана неверная категория';
}
}Всегда проверяйте и фильтруйте входящие данные для безопасности и корректности.
Расширение функционала: динамический выбор с AJAX
Для улучшения UX можно сделать поле выбора с динамической подгрузкой значений через AJAX. Особенно это актуально при большом количестве элементов (пользователей, товаров и т.п.). Пример реализации с использованием jQuery и REST API WordPress:
Создаем AJAX обработчик в WordPress
add_action('wp_ajax_wpassist_get_users', 'wpassist_get_users_ajax');
add_action('wp_ajax_nopriv_wpassist_get_users', 'wpassist_get_users_ajax');
function wpassist_get_users_ajax() {
$search = sanitize_text_field($_GET['q']);
$users = get_users(array(
'search' => '*' . $search . '*',
'search_columns' => array('user_login', 'user_nicename', 'display_name'),
'number' => 10
));
$result = array();
foreach ($users as $user) {
$result[] = array(
'id' => $user->ID,
'text' => $user->display_name
);
}
wp_send_json($result);
}HTML и JavaScript для динамического выбора
<select id="wpassist_user_select" style="width: 300px;"></select>
<script>
jQuery(document).ready(function($) {
$('#wpassist_user_select').select2({
placeholder: 'Выберите пользователя',
ajax: {
url: wpassist_vars.ajax_url + '?action=wpassist_get_users',
dataType: 'json',
delay: 250,
data: function(params) {
return { q: params.term };
},
processResults: function(data) {
return { results: data };
},
cache: true
},
minimumInputLength: 1
});
});
</script>Для работы этого примера потребуется подключить библиотеку Select2 и локализовать переменную wpassist_vars.ajax_url через wp_localize_script. Такой подход позволяет подгружать пользователей по запросу без перезагрузки страницы.
Заключение
Динамические поля выбора в формах WordPress существенно расширяют возможности взаимодействия с пользователем и позволяют создавать гибкие и удобные интерфейсы. Мы рассмотрели базовые примеры вывода списков категорий и пользователей, а также показали, как реализовать динамическую подгрузку через AJAX. Такие решения можно использовать в плагинах, шаблонах и административных панелях.
Для дополнительной оптимизации и расширения функционала советуем обратить внимание на плагины вроде Clearfy Pro, который помогает оптимизировать работу WordPress и управлять элементами сайта.