First add a validation callback to your register_settings
:
register_setting( 'settingsapi_optiongroupname', 'settingsapi_optionname','validation_callback');
then define validation_callback:
function validation_callback($input){
//check if all is good
//If so then return the wanted value to be saved
//If Not then hook your admin notice function and return null to be saved ex:
if ($something){
return $input;
}else{
add_settings_error('unique_identifyer',esc_attr('settings_updated'),__('Settings saved.'),'updated');
add_action('admin_notices', 'print_errors');
return null;
}
}
and last define print_errors something like:
function print_errors(){
settings_errors( 'unique_identifyer' );
}
and if nothing happens then try adding include_once 'options-head.php';
in your page
Update
here is a plugin to test and see that it works just fine:
<?php
/*
Plugin Name: wpse62418
Plugin URI: http://en.bainternet.info
Description: answer to http://wordpress.stackexchange.com/questions/62418/verify-submitted-form-values-and-show-warning-messages-with-setting-api/62434
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/
add_action('admin_init', 'settingsapi_init');
function settingsapi_init(){
register_setting( 'settingsapi_optiongroupname', 'settingsapi_optionname','validation_callback'); //
add_settings_section('plugin_main', 'Section 1', 'settingsapi_sectiondescription', 'settingsapi_pageslug');
add_settings_field('plugin_text_string_a', 'Option A', 'settingsapi_setting_string_a', 'settingsapi_pageslug', 'plugin_main');
}
function settingsapi_sectiondescription() {
echo '<p>This is a section description.</p>';
}
function settingsapi_setting_string_a() {
$options = get_option('settingsapi_optionname');
?>
<input type="hidden" name="settingsapi_optionname[submitted]" value="1" />
<input id="plugin_text_string" name="settingsapi_optionname[preview][option_a]" size="40" type="text" value="<?php echo isset( $options['preview']['option_a']) ? $options['preview']['option_a'] : ''; ?>" />
<?php
}
// admin menu
add_action('admin_menu', 'plugin_admin_add_page');
function plugin_admin_add_page() {
add_options_page('Custom Plugin Page', 'Demo Settings API Menu for Verification', 'manage_options', 'settingsapi_pageslug', 'settingsapi_adminpage');
}
function settingsapi_adminpage() {
?>
<div class="wrap">
<?php screen_icon(); ?> <h2>Demo Plugin for Validation Message with Settings API</h2>
<?php
$options = get_option('settingsapi_optionname');
print_r($options); // for debugging purpose
?>
<form action="options.php" method="post">
<?php
settings_fields('settingsapi_optiongroupname');
do_settings_sections('settingsapi_pageslug');
// after displaying the form content, set the invalid flag and the subbmited flag to false
submit_button();
?>
</form>
</div>
<?php
print_r($options);
?>
<?php
}
function validation_callback($input){
add_settings_error('unique_identifyer',esc_attr('settings_updated'),__('Settings NOT saved.'),'error');
add_action('admin_notices', 'print_errors');
return $input;
}
function print_errors(){
settings_errors( 'unique_identifyer' );
}