plugin development - Options API - Validation Callback $input is NULL

admin2025-06-02  2

Issue is that the validation callback function for my plugin has NULL as the $input value.

It's my understanding that the validation callback will use the $input parameter, which contains the POST fields. But when I test the validation callback, the $input parameter is NULL, even though settings are checked.

Note that the settings page has just checkboxes; no other input field types.

My register_settings is as follows; it is tied to the admin_init hook.

register_setting( 
   'pluginPage',    // option group name
    'Settings Name',    // option name (used to store into wp-options
    array('sanitize_callback' => 'sanitize_callback' // sanitize the data function')
    );

And the sanitize_data callback:

 function sanitize_callback($input)
    { $new_input = array();
  // ... some checking here, setting $new_input array values if $input array value exists
  return $new_input;}

Because $input is NULL, which I have verified with a print_r($input);exit; at the beginning of the sanitize_callback() function, the options are not saved in wp-options.

The only way I can get options saved is to use $_POST variables in the sanitize_callback function. That will properly store the options.

So, why is the sanitize_callback function not receiving the $_POST variables when the form is submitted?

Note that I have followed the instructions in the Settings API; I have verified all code is correct according to those instructions. The form is displayed with this code, so the nonce is in the form.

<form action='options.php' method='post'>
        <?php
        settings_fields( 'pluginPage' );    // initializes all of the settings fields
        do_settings_sections( 'pluginPage' );   // does the settings section
        submit_button();    // creats the submit button
        ?>
    </form>

Issue is that the validation callback function for my plugin has NULL as the $input value.

It's my understanding that the validation callback will use the $input parameter, which contains the POST fields. But when I test the validation callback, the $input parameter is NULL, even though settings are checked.

Note that the settings page has just checkboxes; no other input field types.

My register_settings is as follows; it is tied to the admin_init hook.

register_setting( 
   'pluginPage',    // option group name
    'Settings Name',    // option name (used to store into wp-options
    array('sanitize_callback' => 'sanitize_callback' // sanitize the data function')
    );

And the sanitize_data callback:

 function sanitize_callback($input)
    { $new_input = array();
  // ... some checking here, setting $new_input array values if $input array value exists
  return $new_input;}

Because $input is NULL, which I have verified with a print_r($input);exit; at the beginning of the sanitize_callback() function, the options are not saved in wp-options.

The only way I can get options saved is to use $_POST variables in the sanitize_callback function. That will properly store the options.

So, why is the sanitize_callback function not receiving the $_POST variables when the form is submitted?

Note that I have followed the instructions in the Settings API; I have verified all code is correct according to those instructions. The form is displayed with this code, so the nonce is in the form.

<form action='options.php' method='post'>
        <?php
        settings_fields( 'pluginPage' );    // initializes all of the settings fields
        do_settings_sections( 'pluginPage' );   // does the settings section
        submit_button();    // creats the submit button
        ?>
    </form>
Share Improve this question asked Jun 21, 2018 at 21:16 Rick HellewellRick Hellewell 7,1612 gold badges23 silver badges41 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 3

I guess in the meantime you figured in out already. Though I want to share my experience since I faced the same problem and it might be useful for others.

In my case I just got the reference to the options wrong when creating the HTML code for the input-elements.

So since Wordpress suggests to have one option saving an array of values that are the actual settings of your plugin/theme/whatever, you'll problaby have something like this somewhere: (Note: I will use plugin_config where you you have Settings Name, Rick.)

add_option('plugin_config', array(
    'val1' => 1,
    'val2' => 2'
));

Then in addition to registering the settings somwhere you will have registered the corresponding fields to enter values for the section, like this:

add_settings_field('val1_field', 'Field Label:', 'creat_html_callback', 'settings_page_slug_name');

Now the intresting part; when defining the html code, you have to set the name of the field in a way that wordpress can associate the corresponding post value of the request to the correct array position of the option plugin_config (your Settings Name!). So here is the callback referenced in add_settings_field before

public function creat_html_callback() {
    $option = get_option('plugin_config');
    echo '<input type="text" id="val1Field" name="plugin_config[val1]" size="10" value="'.$option['val1'].'"/>';
}

The essentiell part for me was name="plugin_config[val1]". The name of the html-input-element must be the same as the registered (register_setting!) option/setting or the name of the option together with the array index of the value corresponding to the input field. Of course this seems clear and easy to see. Bit I think whith all those slug-names and references you can get easily confused especially when following a tutorial like this.

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1748803843a313854.html

最新回复(0)