Title: WordPress Settings API Problem
Last modified: August 20, 2016

---

# WordPress Settings API Problem

 *  [James Irving-Swift](https://wordpress.org/support/users/irvingswiftj/)
 * (@irvingswiftj)
 * [14 years, 8 months ago](https://wordpress.org/support/topic/wordpress-settings-api-problem/)
 * Hi,
 * I have a settings page which work beautifully except one key problem….it is not
   saving!
 * Can someone please tell me what I have done wrong?
 *     ```
       <?php
   
       add_action('admin_menu', 'create_esm_options_page');
       add_action('admin_init', 'register_and_build_esm_options');
   
       function register_and_build_esm_options(){
         register_setting('esm_settings_option','esm_mailtype', 'validate_esm_mail_setup');
         register_setting('esm_settings_option','esm_settings', 'validate_esm_mail_setup');
   
         add_settings_section('mail_section', 'Mail Settings','esm_section_callback','esm_mail_setup');
         add_settings_field('esm_mail_type','Mail Type: ','esm_mail_type','esm_mail_setup','mail_section');
   
         add_settings_section('mail_smtp_section', 'SMTP Settings','esm_section_smtp_callback','esm_mail_setup');
         add_settings_field('esm_mail_smtp_host','Host: ','esm_mail_smtp_host','esm_mail_setup','mail_smtp_section');
         add_settings_field('esm_mail_smtp_port','Port: ','esm_mail_smtp_port','esm_mail_setup','mail_smtp_section');
         add_settings_field('esm_mail_smtp_secure','Secure: ','esm_mail_smtp_secure','esm_mail_setup','mail_smtp_section');
         add_settings_field('esm_mail_smtp_auth','Auth: ','esm_mail_smtp_auth','esm_mail_setup','mail_smtp_section');
         add_settings_field('esm_mail_smtp_username','SMTP Username: ','esm_mail_smtp_username','esm_mail_setup','mail_smtp_section');
         add_settings_field('esm_mail_smtp_password','SMTP Password: ','esm_mail_smtp_password','esm_mail_setup','mail_smtp_section');
       }
   
       function create_esm_options_page() {
         add_menu_page('Mail Setup', 'Mail Setup', 'administrator', 'esm', 'esm_options_page');
       }
   
       function esm_options(){ ?>
       <?php print_r($_POST);?>
       	<form method="post" action="">
             <?php settings_fields('esm_settings_option'); ?>
             <?php do_settings_sections('esm_mail_setup'); ?>
             <p class="submit">
               <input name="Submit" type="submit" class="button-primary" value="<?php esc_attr_e('Save Changes'); ?>" />
             </p>
           </form>
       <?php }
   
       function esm_options_page() {
       ?>
         <div id="theme-options-wrap">
           <div class="icon32" id="icon-tools"> <br /> </div>
           <h2>Electric Studio Postcard Mailer</h2>
       	<div><?php esm_options(); ?></div>
   
           <p>Plugin Created By <a href="http://www.electricstudio.co.uk/2011/05/wordpress-auto-post-expire-plugin/">Electric Studio</a> | Get WordPress Hosting from <a href="www.electrichosting.co.uk">Electric Hosting</a></p>
         </div>
       <?php
       }
   
       function validate_esm_mail_setup($option){
           //put any validation on the option here.
           return $option;
       }
   
       function esm_section_callback(){}
   
       function esm_section_smtp_callback(){
       	$html = "<p>Only required if mail type is set to SMTP</p>";
       	echo $html;
       }
   
       function esm_mail_type(){
       	$optionValue = get_option('esm_mail_type');
           $option = "";
           $option .= "<input type=\"radio\" name=\"esm_mail_type\" value=\"mail\" ".checked($optionValue , 'mail',false)." ";
           if($optionValue == "")
           	$option .= "checked=\"checked\"";
           $option .= "/>Mail<br/>";
           $option .= "<input type=\"radio\" name=\"esm_mail_type\" value=\"smtp\" ".checked($optionValue , 'smtp', false)."/>SMTP<br/>";
           echo $option;
       }
   
       function esm_mail_smtp_host(){
       	$optionValue = get_option('esm_settings');
           $option = "";
           $option .= "<input id='esm_smtp_host' name='esm_settings[host]' size='40' type=\"text\" value='{$optionValue['host']}' />";
           echo $option;
       }
   
       function esm_mail_smtp_port(){
       	$optionValue = get_option('esm_settings');
           $option = "";
           $option .= "<input id='esm_smtp_port' name='esm_settings[port]' size='40' type=\"text\" value='{$optionValue['port']}' />";
           echo $option;
       }
   
       function esm_mail_smtp_secure(){
       	$optionValue = get_option('esm_settings');
           $option = "";
           $option .= "<input id='esm_smtp_secure' name='esm_settings[secure]' size='40' type=\"text\" value='{$optionValue['secure']}' />";
           echo $option;
       }
   
       function esm_mail_smtp_auth(){
       	$optionValue = get_option('esm_settings');
           $option = "";
           $option .= "<input id='esm_smtp_auth' name='esm_settings[auth]' size='40' type=\"text\" value='{$optionValue['auth']}' />";
           echo $option;
       }
   
       function esm_mail_smtp_username(){
       	$optionValue = get_option('esm_settings');
           $option = "";
           $option .= "<input id='esm_smtp_username' name='esm_settings[username]' size='40' type=\"text\" value='{$optionValue['username']}' />";
           echo $option;
       }
   
       function esm_mail_smtp_password(){
       	$optionValue = get_option('esm_settings');
       	$option = "<input id='esm_smtp_password' name='esm_settings[password]' size='40' type='password' value='{$optionValue['password']}' />";
           echo $option;
       }
       ```
   

Viewing 2 replies - 1 through 2 (of 2 total)

 *  Thread Starter [James Irving-Swift](https://wordpress.org/support/users/irvingswiftj/)
 * (@irvingswiftj)
 * [14 years, 8 months ago](https://wordpress.org/support/topic/wordpress-settings-api-problem/#post-2197961)
 * p.s. I have noticed that on line 8, ‘esm_mailtype’ should be ‘esm_mail_type’….
   so I have corrected this however still no joy 🙁
 *  Thread Starter [James Irving-Swift](https://wordpress.org/support/users/irvingswiftj/)
 * (@irvingswiftj)
 * [14 years, 8 months ago](https://wordpress.org/support/topic/wordpress-settings-api-problem/#post-2197971)
 * I found out the problem! I hope this helps someone else, but on the <form> tag,
   the action MUST be action=”options.php” .
 * facepalm!

Viewing 2 replies - 1 through 2 (of 2 total)

The topic ‘WordPress Settings API Problem’ is closed to new replies.

## Tags

 * [setting api](https://wordpress.org/support/topic-tag/setting-api/)

 * 2 replies
 * 1 participant
 * Last reply from: [James Irving-Swift](https://wordpress.org/support/users/irvingswiftj/)
 * Last activity: [14 years, 8 months ago](https://wordpress.org/support/topic/wordpress-settings-api-problem/#post-2197971)
 * Status: not resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
