Я создал функцию проверки, вот она в более короткой версии:
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. Когда он получает новый $input, он перезаписывает старый #valid_inpu и т. д.
Я хочу создать дополнительный массив $valid_input[$id], который не будет перезаписывать себя, а просто вставит внутрь новые элементы.
Таким образом, новый обновленный код будет выглядеть так:
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;
};
Как упоминалось в комментарии выше - это не работает, ввод всегда перезаписывает параметр, он создает array, но он всегда содержит только один элемент, который стирается вместе с новым (полагаю, 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][] = $input[$id];
}
}
return $valid_input;
};
. Тем не менее, старое значение $valid_input перезаписывается вместо того, чтобы вставлять элемент.
Есть идеи? Может быть, что-то не так с кодом? Вся эта функция является обратным вызовом Wordpress для функции, называемой register_setting(), но я думаю, что это в основном связано с PHP, поскольку люди на WPSE не могут мне помочь.
Это делает именно то, что я хочу, но почему пункт 3. тогда не работает?
else if($foo == "noupdate") { // it doesn't work
$valid_input[$id][] = 'something';
$valid_input[$id][] = 'something_else';
$valid_input[$id][] = 'something_else2';
}