Обзор
Нужно динамически заполнять варианты поля? Этот туториал показывает, как взять значение, сохранённое на странице опций, и использовать его для переопределения массива choices у поля Select.
Атрибут массива ‘choices’ также используется с полями Radio Button и Checkbox. Большая часть этого туториала подходит для любого из этих полей, но пример с AJAX можно использовать только с полем Select.
Требования
Для этого туториала требуется использовать фильтр acf/load_field в сочетании с модификатором name, чтобы применить фильтр ко всем полям с конкретным name. Атрибут name — это то, как поле хранится и на что ссылается база данных WordPress.
Заполнение вариантов из поля Text Area
В этом примере мы загрузим поле Text Area с именем my_select_values со страницы опций и используем текст каждой строки как вариант для выбора в поле Select. name поля Select в этом примере — color.
functions.php
function acf_load_color_field_choices( $field ) {
// Сбрасываем choices
$field['choices'] = array();
// Получаем значения Text Area со страницы опций без какого-либо форматирования
$choices = get_field('my_select_values', 'option', false);
// Разбиваем значение так, чтобы каждая строка стала отдельным элементом массива
$choices = explode("\n", $choices);
// Удаляем лишние пробелы
$choices = array_map('trim', $choices);
// Проходим по массиву и добавляем в поле 'choices'
if( is_array($choices) ) {
foreach( $choices as $choice ) {
$field['choices'][ $choice ] = $choice;
}
}
// Возвращаем поле
return $field;
}
add_filter('acf/load_field/name=color', 'acf_load_color_field_choices');
Заполнение вариантов из поля Repeater
В этом примере мы загрузим поле Repeater с именем my_select_values со страницы опций и используем подполе value и label как варианты для выбора в поле Select.
functions.php
function acf_load_color_field_choices( $field ) {
// Сбрасываем choices
$field['choices'] = array();
// Проверяем, есть ли в Repeater строки данных для перебора
if( have_rows('my_select_values', 'option') ) {
// Выполняем цикл, пока нижеуказанное условие истинно
while( have_rows('my_select_values', 'option') ) {
// Получаем массив со всеми значениями после завершения цикла
the_row();
// Переменные
$value = get_sub_field('value');
$label = get_sub_field('label');
// Добавляем в choices
$field['choices'][ $value ] = $label;
}
}
// Возвращаем поле
return $field;
}
add_filter('acf/load_field/name=color', 'acf_load_color_field_choices');Заполнение поля Select через AJAX
В отличие от полей Radio Button и Checkbox, поле Select можно заполнять через AJAX. Это может ускорить загрузку страницы при использовании фильтра acf/load_field для заполнения вариантов поля Select. Для работы этого фильтра у поля Select должны быть включены параметры «Стилизованный интерфейс» и «Использовать AJAX для ленивой загрузки вариантов». Параметр «Использовать AJAX для ленивой загрузки вариантов» скрыт, пока в настройках поля Select не включён «Стилизованный интерфейс».
function filter_field( array $field ) : array {
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
$field['choices'] = time_consuming_call_to_get_choices();
}
return $field;
}
add_filter( "acf/load_field/key=$key", 'filter_field', 10, 1 );
Обновлено: 01.06.2026