There are three main components in the Settings API: The Setting, the Field and the Section. The Setting is the actual option that is stored inside the WordPress database. The Field is a form control rendered in our options page, such as a text input, or a dropdown select. The Section is just a way to group fields together.
function antispampro_menu() { // add menu item
add_options_page( 'Anti-spam-pro', 'Anti-spam-pro', 'manage_options', 'anti-spam-pro', 'antispampro_options' );
}
add_action( 'admin_menu', 'antispampro_menu' );
function antispampro_admin_init() {
register_setting( 'antispampro-options-group', 'antispampro_options'/*, 'antispampro_options_validate'*/ );
add_settings_section( 'antispampro-options-section', 'Section One', 'antispampro_section_callback', 'antispampro-plugin' );
add_settings_field( 'send_spam_comment_to_email', 'Send spam comment to email', 'antispampro_field_send_spam_to_email_callback', 'antispampro-plugin', 'antispampro-options-section' );
add_settings_field( 'email', 'Email', 'antispampro_field_email_callback', 'antispampro-plugin', 'antispampro-options-section' );
}
add_action( 'admin_init', 'antispampro_admin_init' );
function antispampro_default_options() {
$options = array(
'send_spam_comment_to_email' => '1',
'email' => 'info@mail.com'
);
return $options;
}
function antispampro_options_init() { // set options equal to defaults
global $antispampro_options;
$antispampro_options = get_option( 'antispampro_options' );
if ( $antispampro_options === false ) {
$antispampro_options = antispampro_default_options();
}
update_option( 'antispampro_options', $antispampro_options );
}
add_action( 'admin_init', 'antispampro_options_init' );
function antispampro_options_validate( $input ) {
$output = get_option( 'antispampro_options' );
//if ( is_email( $input['email'] ) )
// $output['email'] = $input['email'];
//else
// add_settings_error( 'my-settings', 'invalid-email', 'You have entered an invalid e-mail address.' );
return $output;
}
function antispampro_section_callback() {
echo 'Anti-spam-pro options description.';
}
function antispampro_field_email_callback() {
$option = (array) get_option( 'antispampro_options' );
echo '<input type="text" name="antispampro_options[email]" value="'.esc_attr($option['email']).'" />';
}
function antispampro_field_send_spam_to_email_callback() {
$option = (array) get_option( 'antispampro_options' );
echo '<input type="text" name="antispampro_options[send_spam_comment_to_email]" value="'.esc_attr($option['send_spam_comment_to_email']).'" />';
}
function antispampro_options() {
?>
<div class="wrap">
<h2>Anti-spam-pro Options</h2>
<form method="post" action="options.php">
<?php settings_fields( 'antispampro-options-group' ); ?>
<?php do_settings_sections( 'antispampro-plugin' ); ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}