#php #wordpress #advanced-custom-fields
#php #wordpress #расширенные пользовательские поля
Вопрос:
Итак, это пример моего кода:
function acf_populate_age_select( $field ) {
//Get the values from textarea on option page
$site_settings = get_field('theme_settings','option');
$exhibitor_options = $site_settings[0]['exhibitor_options'];
//Turn the values in to an array
$ages = explode(PHP_EOL,$exhibitor_options['age_groups']);
//Clear the choices
$field['choices'] = array();
//Repopulate $field['choices']
foreach ( $ages as $age ) {
$field['choices'][$age] = $age;
}
return $field;
}
add_filter( "acf/load_field/key=field_5f451fd1af75e", 'acf_populate_age_select' );
Взят пример из:
https://www.advancedcustomfields.com/resources/dynamically-populate-a-select-fields-choices/
Я пытаюсь заполнить значение выпадающего поля при загрузке из поля текстовой области на странице параметров. Он заполняется нормально, но я сталкиваюсь с некоторыми проблемами.
Ошибки, с которыми я сталкиваюсь, являются:
-
если я сначала очищаю $field[‘choices’], а затем повторно заполняю его, то, пока выбранное значение на странице в базе данных правильное, оно сбрасывается до первого значения в редакторе, как если бы значение было сохранено, но выпадающий список перезаписывается после загрузки
-
если я сначала не очищу варианты, старые значения останутся в выпадающем списке как призраки, даже если их нельзя найти в базе данных или серверной части WP
Может кто-нибудь увидеть, что я делаю неправильно, или знает, что я мог бы попытаться заполнить выпадающий список, а затем выделить текущее выбранное значение, хранящееся в базе данных?
Я использую ACF Pro v5.9 на WordPress v5.5
Ответ №1:
[palmface] похоже, это важная строка:
// remove any unwanted white space
$choices = array_map('trim', $choices);
Итак, для приведенного выше вопроса:
//Turn the values in to an array
$ages = explode(PHP_EOL,$exhibitor_options['age_groups']);
$ages = array_map('trim', $ages);
if($ages === $field['choices'])
return $field;
//Clear the choices
$field['choices'] = array();
Как вы можете видеть, я также проверил, равны ли массивы, и если да, то не обновлять. Но я думаю, что обрезка (для удаления конечного возврата) была хитростью.