1. PHP функция.
Я создал функцию проверки, вот она в сокращенной версии:
function my_function($input) {
$settings = my_source(); // function taht outputs a long array
foreach ($settings as $setting) {
$id = $setting['id'];
$foo = $setting['foo'];
$option = get_option('my_theme_settings');
if($foo == "bar") {
$valid_input[$id] = $input[$id];
}
}
return $valid_input;
};
Обычно он принимает $ input и сохраняет его как $ valid_input. Когда он получает новый ввод $, он перезаписывает старый #valid_inpu и т. Д.
Я хочу создать дополнительный массив $ valid_input [$ id], который не будет перезаписывать себя, а просто вставит новые элементы внутрь.
2. Array_push (), который не работает.
Таким образом, новый обновленный код будет выглядеть так:
function my_function($input) {
$settings = my_source(); // function taht outputs a long array
foreach ($settings as $setting) {
$id = $setting['id'];
$foo = $setting['foo'];
$option = get_option('my_theme_settings');
if($foo == "bar") {
$valid_input[$id] = $input[$id];
}
else if($foo == "noupdate") { // it doesn't work
$valid_input[$id] = array();
array_push($valid_input[$id], $input[$id]);
}
}
return $valid_input;
};
Как упомянуто в комментарии выше - это не работает, input всегда перезаписывает параметр, он создает массив, но он всегда содержит только один элемент, который стирается с новым (я думаю, array_push должен предотвратить такое поведение, верно ?).
3. То же самое происходит с $ array [] =
function my_function($input) {
$settings = my_source(); // function taht outputs a long array
foreach ($settings as $setting) {
$id = $setting['id'];
$foo = $setting['foo'];
$option = get_option('my_theme_settings');
if($foo == "bar") {
$valid_input[$id] = $input[$id];
}
else if($foo == "noupdate") { // it doesn't work
$valid_input[$id][] = $input[$id];
}
}
return $valid_input;
};
Тем не менее он перезаписывает старое значение $ valid_input вместо нажатия на элемент.
Есть идеи? Может быть, что-то не так с кодом? Вся эта функция - обратный вызов Wordpress для функции с именем register_setting () , но я думаю, что это в основном связано с PHP, так как люди на WPSE не могут мне помочь.
4. EDIT
Это именно то, что я хочу, но почему пункт 3 не работает тогда?
else if($foo == "noupdate") { // it doesn't work
$valid_input[$id][] = 'something';
$valid_input[$id][] = 'something_else';
$valid_input[$id][] = 'something_else2';
}