Callback function is being called twice
I have registered a setting, added a section in my plugin. Inside that section, multiple inputs (checkboxes) fields have been added using the add_settings_field
method. This method has a callback function which I am using to return true for checkboxes which are checked and return false which are unchecked in an array.
Now the problem is this function works as expected except the plugin is activated for the first time. For first time activation, the callback function is being called twice. Once the option is stored in the database then it doesn't called for the second time which it shouldn't be. But if I deletes the option value from database then again same problem occures.
Here is my code
Register Setting
public function setSettings()
{
$args = array();
$args[] = array(
'option_group' = 'fahad_plugin_settings',
'option_name' = 'fahad_plugin',
'callback' = array($this-callbacks_mngr, 'checkboxSanitize')
);
$this-settings-setSettings($args);
}
Adding Section
public function setSections()
{
$args = array(
array(
'id' = 'fahad_admin_index',
'title' = 'Settings Manager',
'callback' = array($this-callbacks_mngr, 'adminSectionManager'),
'page' = 'fahad_plugin'
)
);
$this-settings-setSections($args);
}
Added Fields
public function setFields()
{
$args = array();
foreach ($this-managers as $key = $value)
{
$args[] = array(
'id' = $key,
'title' = $value,
'callback' = array($this-callbacks_mngr, 'checkboxField'),
'page' = 'fahad_plugin',
'section' = 'fahad_admin_index',
'args' = array(
'option_name' = 'fahad_plugin',
'label_for' = $key,
'class' = 'ui-toggle',
)
);
}
$this-settings-setFields($args);
}
Form Submitting The Fields
form method="post" action="options.php"
?php
settings_fields('fahad_plugin_settings');
do_settings_sections('fahad_plugin');
submit_button();
?
/form
Wordpress FunctionS To Register Setting
//register setting
foreach ($this-settings as $setting) {
register_setting($setting["option_group"], $setting["option_name"], (isset($setting["callback"]) ? $setting["callback"] : ''));
}
//add settings section
foreach ($this-sections as $section) {
add_settings_section($section["id"], $section["title"], (isset($section["callback"]) ? $section["callback"] : ''), $section["page"]);
}
//add settings field
foreach ($this-fields as $field) {
add_settings_field($field["id"], $field["title"], (isset($field["callback"]) ? $field["callback"] : ''), $field["page"], $field["section"], (isset($field["args"]) ? $field["args"] : ''));
}
Callback function Which is being called twice
public function checkboxSanitize($input)
{
$output = array();
foreach ($this-managers as $key = $value)
{
$output[$key] = isset($input[$key]) ? true : false;
}
return $output;
}
Topic settings-api plugin-development Wordpress
Category Web