Добавить поле настроек(), параметризующее обратный вызов?
Я пытаюсь создать довольно большую и обширную страницу настроек с различными опциями очень похожего типа.
Поскольку будет около 20 различных полей, и различия между большинством из них заключаются просто в их идентификаторе, я бы хотел избежать создания отдельного обратного вызова для каждого из них.
Можно ли выполнить обратный вызов с переменной для идентификатора настроек каждого из этих полей? Таким образом, один обратный вызов может обслуживать различные поля настроек одного и того же тип.
Я пытался использовать параметр $args для add_setitngs_feild(), но, к сожалению, это не работает. Например:
add_settings_field('name', 'Field Name', array($this, 'fieldCallback'), 'SettingsGrouP', 'SettingsSection', array("settingID!"));
function fieldCallback($id)
{
echo "<input id='" . $id . "'/>";//etc, etc
}
Вызывается функция Fieldcallback, но идентификатор ввода пуст.
4 answers
Последний необязательный аргумент $args
, который вы можете передать add_settings_fields()
передается для обратного вызова. Так что, похоже, вы можете использовать тот же обратный вызов просто отлично.
Надеюсь, я прав, потому что я только что наткнулся на это две минуты назад из-за обсуждения в чате. :)
PS просмотрел код, и он действительно относительно недавний, до того, как ~2.9 аргументов не были переданы.
В последнем (необязательном) аргументе $args
в функции add_settings_field()
вы можете использовать array('label_for' => 'something')
, как написано в документации (см. http://codex.wordpress.org/Function_Reference/add_settings_field ).
Поэтому, если вы хотите передать идентификатор своего поля, используйте для него "label_for":)
Способ, которым Wordpress передает аргументы функции обратного вызова, здесь немного сложен, функция обратного вызова получает весь массив $args
в качестве параметра, поэтому вы можете изменить функцию следующим образом:
function fieldCallback(array $args)
{
echo "<input id='" . $args[0] . "'/>";//etc, etc
}
И вы оставляете add_settings_field
как есть.
add_settings_field(
'name',
'Field Name',
array($this, 'fieldCallback'),
'SettingsGrouP',
'SettingsSection',
$args=array("settingID!")
);
function fieldCallback($id) {
`echo "<input id='" . $id[0] . "'/>";`
}
ИЛИ
Что проиллюстрировал Джейсер Омри