Как можно использовать переменную в качестве имени функции обратного вызова для поля "Добавить настройки"
Я пытаюсь сократить объем кода, который содержится в моей функции параметров темы. Я добавляю свои настройки следующим образом: add_settings_field ($k,$v,$обратный вызов,$the_options,$the_group,$args);
Это работает для меня во всех отношениях, пока я записываю имя функции. Например, если $callback = 'awesome_callback' - и я создаю функцию с именем
awesome_callback(){ echo 'something'};
Никаких проблем вообще нет.
Следующий цикл также работает и проходит через массив опций для создания полей настроек.. и захватывает все необходимые данные. это также в точности повторяет то, что, по моему мнению, следует назвать моим обратным вызовом. Однако прямо сейчас у меня есть миллион функций обратного вызова вне этого цикла, которые все выглядят совершенно одинаково, за исключением имени функции. :(
foreach($theOptions as $k=>$v) {
add_settings_field($k,$v,$callback,$the_options,$the_group,$args);
echo $callback;
}
Обнажись со мной. Я надеюсь, что кто-то сталкивался с этой проблемой раньше и даст мне знать, что я упускаю что-то очевидное. Следующее также работает в моей среде wordpress за пределами тот же цикл.
$callback = 'awesome_callback';
$callback = function() {
echo 'awesome callback';
}
$callback();
Однако следующее возвращает ошибку неизвестной функции обратного вызова, хотя, когда я повторяю переменную $callback, она повторяет точную строку, на которую я ссылаюсь в функции обратного вызова. Я предполагаю, что я превышаю значение обратного вызова...???
foreach($theOptions as $k=>$v) {
$callback = $k.'_callback';
add_settings_field($k,$v,$callback,$the_options,$the_group,$args);
$callback = function() {
echo 'Testing the callback !!! <br>';
};
}
Может ли кто-нибудь объяснить решение для циклического перебора множества параметров таким образом, чтобы можно было вызывать функцию обратного вызова в цикле без необходимости ее жесткого кодирования? Это что-то такое, что может быть решена с помощью класса? Я не могу втиснуть в это голову.
1 answers
Не используйте разные обратные вызовы, вместо этого используйте шестой параметр для add_settings_field()
. Это массив, и вы можете передать любые данные в обратный вызов здесь.
Пример:
foreach( $theOptions as $k => $v )
{
add_settings_field(
$k,
$v,
'my_callback',
$the_options,
$the_group,
array (
'special' => $k
)
);
}
function my_callback( $args )
{
var_dump( $args['special'] );
switch ( $args['special'] )
{
case 'foo':
// do something
break;
case 'bar':
// do something else
break;
default:
// default handler
}
}