Как динамически заполнять расширенные настройки настраиваемых полей
С некоторым PHP-кодом действительно легко динамически заполнять значения или варианты расширенных настраиваемых полей (ACF). Вы можете сделать это для любого типа ввода, включая выбор радио, флажков и т.п. В этом посте мы рассмотрим как.
Фильтр
Advanced Custom Fields предлагает фильтр с именем [acf/load_field](https://www.advancedcustomfields.com/resources/acf-load_field/). Вы можете использовать этот фильтр несколькими способами. Либо отфильтруйте acf/load_field, чтобы применить его ко всем типам полей, либо включите код внутри своей функции, чтобы выяснить, какой тип поля или имя вам нужно. Или вы можете указать тип поля (acf/load_field/type=<type>), имя (acf/load_field/name=<name>) или ключ (acf/load_field/key=<key>).
Предположим, мы создаем текстовое поле следующим образом:
Мы могли бы указать это с помощью acf/load_field/name=dyn_pop_example(нацеливается только на это конкретное поле), acf/load_field/type=text(применяется ко всем полям текстового типа) или acf/load_field(применяется ко всем полям любого типа или имени). При использовании последних двух фильтров вы можете, конечно, внутри функции нацеливаться на определенную информацию поля, такую как имя. Каждое поле в ACF также получает уникальный ключ, но они скрыты и в основном предназначены для внутреннего использования ACF.
Фильтр предоставляет одну переменную; массив полей. Этот массив дает вам всю информацию о текущем поле. Что вы делаете, так это просто меняете информацию в массиве и возвращаете измененный массив полей. В зависимости от типа поля элементы в массиве различаются. Например, типы полей с множественным выбором, такие как select и radioboxes, будут иметь элемент массива ‘ choices‘, которого не будет в полях типа text. Я рекомендую вам сделать var_dump()из предоставленного массива, чтобы увидеть, к какой информации у вас есть доступ.
Давайте начнем изучать реальный код!
Население: простые примеры
Установка значения по умолчанию для текстового ввода будет выглядеть примерно так:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$field['default_value'] = __('This is default value', 'txtdomain');
return $field;
});
Мы нацеливаем наш текстовый ввод на имя dyn_pop_exampleи устанавливаем его значение по умолчанию (ключ ‘ default_value‘) на строку по нашему собственному выбору. Затем поле будет отображаться следующим образом:
Вы можете изменить любые настройки поля. В приведенном ниже примере мы устанавливаем заполнитель текста и инструкции:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$field['placeholder'] = __('Type in here', 'txtdomain');
$field['instructions'] = __('Some instructions coming from code', 'txtdomain');
return $field;
});
Что заставит поле отображаться так:
Заполните варианты
Если вы хотите динамически заполнить варианты выбора поля выбора, радио или флажка, вы делаете это в ключевом элементе массива ‘ choices‘. Этот choicesэлемент ‘ ‘ применяется ко всем полям типа select, radio и checkbox.
Элемент ‘ choices‘ должен быть массивом пар ключ + значение. Ключи — это значения (которые будут сохранены), а значения — это метка, которая появляется в качестве выбора.
Предположим, мы изменили наше поле на select. Вы можете оставить варианты пустыми, так как они будут установлены с помощью нашего кода.
Для заполнения выбора выбора мы делаем это следующим образом:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$choices = [
'red' => __('Red Color', 'txtdomain'),
'blue' => __('Blue Color', 'txtdomain'),
'green' => __('Green Color', 'txtdomain')
];
$field['choices'] = $choices;
$field['default_value'] = 'blue';
return $field;
});
В строке #2 - #6мы просто определяем массив вариантов. Измените это в соответствии с вашими потребностями. В строке #7мы присваиваем выбор поля нашему массиву. На всякий случай мы также устанавливаем значение поля по умолчанию. В этом нет необходимости — без строки #8выбор просто автоматически выберет первый вариант в массиве («красный»).
Приведенный выше код отобразит поле следующим образом:
Выбор за вами, все, о чем вам нужно позаботиться, это предоставить правильный массив ключей + значений для choicesэлемента поля ‘ ‘. В качестве базового примера этот пример кода показывает, как вы можете превратить обычное поле выбора в выбор сообщений.
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$posts = new WP_Query([
'post_type' => 'page',
'posts_per_page' => -1
]);
$choices = [];
while ($posts->have_posts()) {
$posts->the_post();
$choices[get_the_ID()] = get_the_title();
}
wp_reset_query();
$field['choices'] = $choices;
return $field;
});
В приведенном выше примере кода создается почтовый запрос, извлекающий все страницы, и заполняет массив выбора идентификаторами сообщений в качестве ключей и заголовками сообщений в качестве значений. Это просто как пример; если вы собираетесь делать выбор постов, ACF предлагает другие типы полей специально для этого.




