Upload
konstantin-kovshenin
View
2.366
Download
0
Embed Size (px)
DESCRIPTION
The Settings API is a way to create simple, flexible and secure options pages for your WordPress plugins and themes. This presentation was given at WordCamp Sofia 2012, which covers the basics of the Settings API along with some more advanced topics at the end.
Citation preview
The Settings APIKonstantin Kovsheninkovshenin.com
Setting
Field Section
add_options_page()
ref: http://codex.wordpress.org/Function_Reference/add_options_page
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
ref: http://codex.wordpress.org/Roles_and_Capabilities
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
register_setting()add_settings_section()add_settings_field()
ref: http://codex.wordpress.org/Settings_API
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
ref: http://codex.wordpress.org/Function_Reference/register_setting
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
[...]get_option( 'my-setting' );update_option( 'my-setting', ‘my value’ );
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
ref: http://codex.wordpress.org/Function_Reference/add_settings_section
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
[...]add_options_page( ..., 'my-plugin', ... );
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
ref: http://codex.wordpress.org/Function_Reference/add_settings_field
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
[...]add_options_page( ..., 'my-plugin', ... );
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
add_action( 'admin_init', 'my_admin_init' );function my_admin_init() { register_setting( 'my-settings-group', 'my-setting' ); add_settings_section( 'section-one', 'Section One', 'section_one_callback', 'my-plugin' ); add_settings_field( 'field-one', 'Field One', 'field_one_callback', 'my-plugin', 'section-one' );}
function section_one_callback() { echo 'Some help text goes here.';}
function field_one_callback() { $setting = esc_attr( get_option( 'my-setting' ) ); echo "<input type='text' name='my-setting' value='$setting' />";}
[...]register_setting( 'my-settings-group', 'my-setting' );
add_action( 'admin_menu', 'my_admin_menu' );function my_admin_menu() { add_options_page( 'My Plugin', 'My Plugin', 'manage_options', 'my-plugin', 'my_options_page' );}
function my_options_page() { ?> <div class="wrap"> <h2>My Plugin Options</h2> <form action="options.php" method="POST"> <?php settings_fields( 'my-settings-group' ); ?> <?php do_settings_sections( 'my-plugin' ); ?> <?php submit_button(); ?> </form> </div> <?php}
function my_options_page() { ?> <div class="wrap"> <h2>My Plugin Options</h2> <form action="options.php" method="POST"> <?php settings_fields( 'my-settings-group' ); ?> <?php do_settings_sections( 'my-plugin' ); ?> <?php submit_button(); ?> </form> </div> <?php}
function my_options_page() { ?> <div class="wrap"> <h2>My Plugin Options</h2> <form action="options.php" method="POST"> <?php settings_fields( 'my-settings-group' ); ?> <?php do_settings_sections( 'my-plugin' ); ?> <?php submit_button(); ?> </form> </div> <?php}
[...]register_setting( 'my-settings-group', 'my-setting' );
function my_options_page() { ?> <div class="wrap"> <h2>My Plugin Options</h2> <form action="options.php" method="POST"> <?php settings_fields( 'my-settings-group' ); ?> <?php do_settings_sections( 'my-plugin' ); ?> <?php submit_button(); ?> </form> </div> <?php}
[...]add_options_page( ..., 'my-plugin', ... );
function my_options_page() { ?> <div class="wrap"> <h2>My Plugin Options</h2> <form action="options.php" method="POST"> <?php settings_fields( 'my-settings-group' ); ?> <?php do_settings_sections( 'my-plugin' ); ?> <?php submit_button(); ?> </form> </div> <?php}
ref: http://codex.wordpress.org/Function_Reference/submit_button
Recap
add_options_page()register_setting()add_settings_section()add_settings_field()
settings_fields()do_settings_sections()submit_button()
Using Arrays with the Settings API
register_setting( 'my-settings-group', 'color' );register_setting( 'my-settings-group', 'size' );register_setting( 'my-settings-group', 'quantity' );
register_setting( 'my-settings-group', 'my-settings' );
function field_one_callback() { $settings = (array) get_option( 'my-settings' ); $color = esc_attr( $settings['color'] ); echo "<input type='text' name='my-settings[color]' value='$color' />";}
Sanitization
register_setting( 'my-settings-group', 'my-settings', 'my_settings_sanitize' );
function my_settings_sanitize( $input ) { $input['quantity'] = absint( $input['quantity'] ); return $input;}
Validation
function my_settings_validate( $input ) { $output = get_option( 'my-settings' );
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;}
Reusing Controls with the Settings API
add_settings_field( 'email', 'E-mail', 'my_text_input', 'my-plugin', 'section-one', array( 'name' => 'my-settings[email]', 'value' => $settings['email'], ));
function my_text_input( $args ) { $name = esc_attr( $args['name'] ); $value = esc_attr( $args['value'] ); echo "<input type='text' name='$name' value='$value' />";}