Добавить поле настроек(), параметризующее обратный вызов?


Я пытаюсь создать довольно большую и обширную страницу настроек с различными опциями очень похожего типа.

Поскольку будет около 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, но идентификатор ввода пуст.

Author: Georges Oates Larsen, 2011-05-19

4 answers

Последний необязательный аргумент $args, который вы можете передать add_settings_fields() передается для обратного вызова. Так что, похоже, вы можете использовать тот же обратный вызов просто отлично.

Надеюсь, я прав, потому что я только что наткнулся на это две минуты назад из-за обсуждения в чате. :)

PS просмотрел код, и он действительно относительно недавний, до того, как ~2.9 аргументов не были переданы.

 2
Author: Rarst, 2017-04-13 12:37:32

В последнем (необязательном) аргументе $args в функции add_settings_field() вы можете использовать array('label_for' => 'something'), как написано в документации (см. http://codex.wordpress.org/Function_Reference/add_settings_field ).

Поэтому, если вы хотите передать идентификатор своего поля, используйте для него "label_for":)

 0
Author: kaciak, 2012-11-07 01:39:26

Способ, которым Wordpress передает аргументы функции обратного вызова, здесь немного сложен, функция обратного вызова получает весь массив $args в качестве параметра, поэтому вы можете изменить функцию следующим образом:

function fieldCallback(array $args)
{
    echo "<input id='" . $args[0] . "'/>";//etc, etc
}

И вы оставляете add_settings_field как есть.

 0
Author: Jacer Omri, 2013-07-28 07:12:14
add_settings_field(
    'name', 
    'Field Name', 
    array($this, 'fieldCallback'), 
    'SettingsGrouP', 
    'SettingsSection',
    $args=array("settingID!")
); 

function fieldCallback($id) {
   `echo "<input id='" . $id[0] . "'/>";`
}

ИЛИ

Что проиллюстрировал Джейсер Омри

 -2
Author: Lost 101, 2015-02-09 10:27:53