the settings api

56
The Settings API Konstantin Kovshenin kovshenin.com

Upload: konstantin-kovshenin

Post on 17-May-2015

2.365 views

Category:

Documents


0 download

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.

TRANSCRIPT

Page 1: The Settings API

The Settings APIKonstantin Kovsheninkovshenin.com

Page 2: The Settings API

Setting

Field Section

Page 3: The Settings API
Page 4: The Settings API
Page 5: The Settings API
Page 6: The Settings API
Page 7: The Settings API

add_options_page()

ref: http://codex.wordpress.org/Function_Reference/add_options_page

Page 8: The Settings API

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' );}

Page 9: The Settings API

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' );}

Page 10: The Settings API

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' );}

Page 11: The Settings API

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

Page 12: The Settings API

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' );}

Page 13: The Settings API

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' );}

Page 14: The Settings API

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' );}

Page 15: The Settings API

register_setting()add_settings_section()add_settings_field()

ref: http://codex.wordpress.org/Settings_API

Page 16: The 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' );}

Page 17: The 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' );}

ref: http://codex.wordpress.org/Function_Reference/register_setting

Page 18: The 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' );}

[...]get_option( 'my-setting' );update_option( 'my-setting', ‘my value’ );

Page 19: The 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' );}

ref: http://codex.wordpress.org/Function_Reference/add_settings_section

Page 20: The 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' );}

Page 21: The 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' );}

Page 22: The 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_options_page( ..., 'my-plugin', ... );

Page 23: The 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' );}

ref: http://codex.wordpress.org/Function_Reference/add_settings_field

Page 24: The 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' );}

Page 25: The 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' );}

Page 26: The 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_options_page( ..., 'my-plugin', ... );

Page 27: The 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' );}

Page 28: The 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' );}

Page 29: The Settings API

function section_one_callback() { echo 'Some help text goes here.';}

Page 30: The Settings API

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' );

Page 31: The Settings API

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' );}

Page 32: The Settings API

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}

Page 33: The Settings API

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}

Page 34: The Settings API

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' );

Page 35: The Settings API

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', ... );

Page 36: The Settings API

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

Page 37: The Settings API
Page 38: The Settings API

Recap

Page 39: The Settings API

add_options_page()register_setting()add_settings_section()add_settings_field()

settings_fields()do_settings_sections()submit_button()

Page 40: The Settings API
Page 41: The Settings API
Page 42: The Settings API

Using Arrays with the Settings API

Page 43: The Settings API

register_setting( 'my-settings-group', 'color' );register_setting( 'my-settings-group', 'size' );register_setting( 'my-settings-group', 'quantity' );

Page 44: The Settings API

register_setting( 'my-settings-group', 'my-settings' );

Page 45: The Settings API

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' />";}

Page 46: The Settings API

Sanitization

Page 47: The Settings API

register_setting( 'my-settings-group', 'my-settings', 'my_settings_sanitize' );

Page 48: The Settings API

function my_settings_sanitize( $input ) { $input['quantity'] = absint( $input['quantity'] ); return $input;}

Page 49: The Settings API

Validation

Page 50: The Settings API

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;}

Page 51: The Settings API

Reusing Controls with the Settings API

Page 52: The Settings API

add_settings_field( 'email', 'E-mail', 'my_text_input', 'my-plugin', 'section-one', array( 'name' => 'my-settings[email]', 'value' => $settings['email'], ));

Page 53: The Settings API

function my_text_input( $args ) { $name = esc_attr( $args['name'] ); $value = esc_attr( $args['value'] ); echo "<input type='text' name='$name' value='$value' />";}

Page 54: The Settings API
Page 55: The Settings API
Page 56: The Settings API