I’m trying to create a rather large and extensive settings page with various options of very similar type.
Since there will be about 20 different fields, and the differences between most of those being simply their ID, I’d like to avoid creating a separate callback for each one.
Is it possible to make a callback with a variable for the settings ID of each of these fields? That way one callback can server various settings fields of the same type.
I’ve tried using the $args parameter for add_setitngs_feild(), but sadly, it does not work. For example:
add_settings_field('name', 'Field Name', array($this, 'fieldCallback'), 'SettingsGrouP', 'SettingsSection', array("settingID!"));
function fieldCallback($id)
{
echo "<input id='" . $id . "'/>";//etc, etc
}
fieldCallback si being called, but the ID of the input is blank.
The last optional
$args
argument the you can pass toadd_settings_fields()
is passed to callback. So it seems you can use same callback just fine.Hope I am right because I just stumbled onto this two minutes ago because of discussion in chat. 🙂
PS looked through code and it’s indeed relatively recent, before ~2.9 arguments weren’t passed.
In the last (optional) argument
$args
inadd_settings_field()
function you can usearray('label_for' => 'something')
as it is writen in documentation (see http://codex.wordpress.org/Function_Reference/add_settings_field).So if you want to pass id of your field use ‘label_for’ for it 🙂
The way WordPress passes arguments to the callback function here is a bit tricky, the callback function receives the whole
$args
array as parameter, so you may want to change the function as following:and you leave
add_settings_field
as it is.OR
what Jacer Omri illustrated