Support » Plugins » Issues with register_setting/add_settings_field

  • Resolved Milan Dinić

    (@dimadin)


    I’m working on some hack (plugin) that should place checkbox on Permalink Settings page in administration. Problem is that I can’t save value in database, no matter if field is checked or not.

    Everything else works correct, i.e. if I manually change value of option in database then checkbox is changed too, but I can’t save after clicking on Permalink Settings page.

    Here is code:

    //function to add field on Permalink Settings page
    //based on http://planetozh.com/blog/2009/05/handling-plugins-options-in-wordpress-28-with-register_setting/
    function add_ser_cyr_to_lat_slug_settings_field() {
    
    	// The fields are:
    	//the id the form field will use
    	//name to display on the page
    	//callback function
    	//the name of the page
    	//the section of the page to add the field to
    	add_settings_field('ser_cyr_to_lat_slug' , 'Пресловљавање подлошка' ,
    			'ser_cyr_to_lat_slug_field_callback' , 'permalink' , 'optional');
    
    	//register the setting to make sure it gets checked
    	register_setting('permalink','ser_cyr_to_lat_slug', 'ser_cyr_to_lat_slug_validate');
    }
    
    //function for printing field on Permalink Settings page
    //based on http://planetozh.com/blog/2009/05/handling-plugins-options-in-wordpress-28-with-register_setting/
    function ser_cyr_to_lat_slug_field_callback() {
    	global $ser_cyr_to_lat_slug, $broj;
    	//print checkox ?>
    	<label for="ser_cyr_to_lat_slug"><input id="ser_cyr_to_lat_slug" name="ser_cyr_to_lat_slug" type="checkbox" value="1"
    	<?php checked('1', get_option('ser_cyr_to_lat_slug')); ?>
    	/> Преслови српска ћирилична у енглеска латинична слова у пермалинковима</label>
    
    <?php }
    
    // Sanitize and validate input.
    //based on http://planetozh.com/blog/2009/05/handling-plugins-options-in-wordpress-28-with-register_setting/
    function ser_cyr_to_lat_slug_validate($input) {
    	// Our first value is either 0 or 1
    	$input = ( $input == 1 ? 1 : 0 );
    	return $input;
    }
    
    //add action so that functions could actually work
    add_action('admin_init', 'add_ser_cyr_to_lat_slug_settings_field');

    As you can see, this script is based on Ozh’s tip. When I first time tried this tip, I just copied his functions and that worked without problem. Later when I renamed functions and variables, this didn’t work.

    Here is code that worked:

    add_action('admin_init', 'add_my_settings_field');
    
    function add_my_settings_field(){
    
    // The fields are:
    //the id the form field will use
    //name to display on the page
    //callback function
    //the name of the page
    //the section of the page to add the field to
    add_settings_field('my_field_id' , 'My Field Caption' ,
    			'my_field_callback' , 'writing' , 'default');
    
    //register the setting to make sure it gets checked
    register_setting('writing','my_field_id', 'ozh_sampleoptions_validate');
    }
    
    $my_field_id = get_option('my_field_id');
    $broj = 1;
    //if (!$my_field_id) {
    
    function my_field_callback(){
     global $my_field_id, $broj;
    //echo out the text field, drop down, or other type of field. ?>
    <input id="my_field_id" name="my_field_id" type="checkbox" value="1"
    <?php checked('1', get_option('my_field_id')); ?>
     />
    
    <?php }
    
    // Sanitize and validate input. Accepts an array, return a sanitized array.
    function ozh_sampleoptions_validate($input) {
    	// Our first value is either 0 or 1
    	$input = ( $input == 1 ? 1 : 0 );
    
    	return $input;
    }

    I can’t see where I made mistake.
    If you could see what is problem, please write it.
    Thanks in advance.

Viewing 2 replies - 1 through 2 (of 2 total)
  • Thread Starter Milan Dinić

    (@dimadin)

    Found solution on wp-hackers list, thanks to Austin Matzko.

    To quote him:

    The problem is that the permalink options page does not post its forms
    to wp-admin/options.php, as do the other settings pages. So while you
    can add input fields to that page, register_setting() does nothing for
    you.

    See http://core.trac.wordpress.org/ticket/9296

    dimadin, Thanks for posting this and digging through an answer. I’m also working to add a field to the Permalinks admin page for my Media-Tags plugin. Though currently this is an issue I found a work around that I wanted to share.

    You are (or should be) setting an action for ‘admin_init’ to call your function. Inside this function you are then calling ‘add_settings_field’ or ‘register_settings’, etc. In my code I’m checking if the $_POST variable I set via my input field is available. If so and if the referrer URL is options-permalink.php then I just update the options myself.

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Issues with register_setting/add_settings_field’ is closed to new replies.