SlideShare a Scribd company logo
The Settings API
  Konstantin Kovshenin
  kovshenin.com
Setting




Field             Section
The Settings API
The Settings API
The Settings API
The Settings API
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
The Settings API
Recap
add_options_page()
register_setting()
add_settings_section()
add_settings_field()


settings_fields()
do_settings_sections()
submit_button()
The Settings API
The Settings API
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' />";
}
The Settings API
The Settings API
The Settings API

More Related Content

What's hot (20)

PDF
Using and reusing CakePHP plugins
Pierre MARTIN
 
PPTX
Pengenalan blaast platform sdk
Arief Bayu Purwanto
 
KEY
Keeping It Simple
Stephanie Leary
 
PDF
sfDay Cologne - Sonata Admin Bundle
th0masr
 
PDF
前端MVC 豆瓣说
Ting Lv
 
PPTX
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Atwix
 
PDF
Laravel 로 배우는 서버사이드 #5
성일 한
 
DOC
Jquery examples
programmingslides
 
PDF
Introduction to Web Components
Felix Arntz
 
PPTX
Magento 2 | Declarative schema
Kiel Pykett
 
PDF
jQuery and Rails, Sitting in a Tree
adamlogic
 
KEY
Unit testing with zend framework PHPBenelux
Michelangelo van Dam
 
PPTX
Magento Live Australia 2016: Request Flow
Vrann Tulika
 
PDF
Empowering users: modifying the admin experience
Beth Soderberg
 
TXT
Data20161007
capegmail
 
PPTX
Amp Up Your Admin
Amanda Giles
 
PDF
Unit testing with zend framework tek11
Michelangelo van Dam
 
PDF
망고100 보드로 놀아보자 18
종인 전
 
PDF
RubyBarCamp “Полезные gems и plugins”
apostlion
 
PPTX
Bacbkone js
Артём Курапов
 
Using and reusing CakePHP plugins
Pierre MARTIN
 
Pengenalan blaast platform sdk
Arief Bayu Purwanto
 
Keeping It Simple
Stephanie Leary
 
sfDay Cologne - Sonata Admin Bundle
th0masr
 
前端MVC 豆瓣说
Ting Lv
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Atwix
 
Laravel 로 배우는 서버사이드 #5
성일 한
 
Jquery examples
programmingslides
 
Introduction to Web Components
Felix Arntz
 
Magento 2 | Declarative schema
Kiel Pykett
 
jQuery and Rails, Sitting in a Tree
adamlogic
 
Unit testing with zend framework PHPBenelux
Michelangelo van Dam
 
Magento Live Australia 2016: Request Flow
Vrann Tulika
 
Empowering users: modifying the admin experience
Beth Soderberg
 
Data20161007
capegmail
 
Amp Up Your Admin
Amanda Giles
 
Unit testing with zend framework tek11
Michelangelo van Dam
 
망고100 보드로 놀아보자 18
종인 전
 
RubyBarCamp “Полезные gems и plugins”
apostlion
 

Viewers also liked (9)

PDF
Основые безопасности WordPress
Konstantin Kovshenin
 
PDF
Почему HTTPS соединение необходимо реализовать на Вашем сайте?
Alexey Vidanov
 
PDF
Цикл разработки WordPress
Konstantin Kovshenin
 
PDF
Секреты WP_Query
Konstantin Kovshenin
 
PDF
Memory Management in WordPress
Konstantin Kovshenin
 
PDF
WordPress под нагрузкой: масштабирование и отказоустойчивость
Konstantin Kovshenin
 
PDF
Пожиратели памяти в WordPress
Konstantin Kovshenin
 
PDF
7 убийц производительности WordPress
Konstantin Kovshenin
 
Основые безопасности WordPress
Konstantin Kovshenin
 
Почему HTTPS соединение необходимо реализовать на Вашем сайте?
Alexey Vidanov
 
Цикл разработки WordPress
Konstantin Kovshenin
 
Секреты WP_Query
Konstantin Kovshenin
 
Memory Management in WordPress
Konstantin Kovshenin
 
WordPress под нагрузкой: масштабирование и отказоустойчивость
Konstantin Kovshenin
 
Пожиратели памяти в WordPress
Konstantin Kovshenin
 
7 убийц производительности WordPress
Konstantin Kovshenin
 
Ad

Similar to The Settings API (20)

PPTX
WordPress plugin #3
giwoolee
 
PDF
WordCamp Praga 2015
Tomasz Dziuda
 
PDF
Gail villanueva add muscle to your wordpress site
references
 
PDF
Working with WooCommerce Custom Fields
Anthony Hortin
 
PDF
Gutenberg sous le capot, modules réutilisables
Riad Benguella
 
PDF
How to Create A Magento Adminhtml Controller in Magento Extension
Hendy Irawan
 
PDF
Dig Deeper into WordPress - WD Meetup Cairo
Mohamed Mosaad
 
PDF
날로 먹는 Django admin 활용
KyeongMook "Kay" Cha
 
PDF
Unit testing after Zend Framework 1.8
Michelangelo van Dam
 
PPTX
WordPress 15th Meetup - Build a Theme
Fadi Nicolas Zahhar
 
PDF
Curso Symfony - Clase 3
Javier Eguiluz
 
PPTX
WordPress Plugin development
Mostafa Soufi
 
PDF
Be RESTful (Symfony Camp 2008)
Fabien Potencier
 
PDF
Gae Meets Django
fool2nd
 
KEY
Apostrophe (improved Paris edition)
tompunk
 
PDF
Django Vs Rails
Sérgio Santos
 
PDF
Clean Javascript
Ryunosuke SATO
 
PDF
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018
Damien Carbery
 
PDF
The state of Symfony2 - SymfonyDay 2010
Fabien Potencier
 
PDF
ACL in CodeIgniter
mirahman
 
WordPress plugin #3
giwoolee
 
WordCamp Praga 2015
Tomasz Dziuda
 
Gail villanueva add muscle to your wordpress site
references
 
Working with WooCommerce Custom Fields
Anthony Hortin
 
Gutenberg sous le capot, modules réutilisables
Riad Benguella
 
How to Create A Magento Adminhtml Controller in Magento Extension
Hendy Irawan
 
Dig Deeper into WordPress - WD Meetup Cairo
Mohamed Mosaad
 
날로 먹는 Django admin 활용
KyeongMook "Kay" Cha
 
Unit testing after Zend Framework 1.8
Michelangelo van Dam
 
WordPress 15th Meetup - Build a Theme
Fadi Nicolas Zahhar
 
Curso Symfony - Clase 3
Javier Eguiluz
 
WordPress Plugin development
Mostafa Soufi
 
Be RESTful (Symfony Camp 2008)
Fabien Potencier
 
Gae Meets Django
fool2nd
 
Apostrophe (improved Paris edition)
tompunk
 
Django Vs Rails
Sérgio Santos
 
Clean Javascript
Ryunosuke SATO
 
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018
Damien Carbery
 
The state of Symfony2 - SymfonyDay 2010
Fabien Potencier
 
ACL in CodeIgniter
mirahman
 
Ad

More from Konstantin Kovshenin (8)

PDF
Scaling out with WordPress
Konstantin Kovshenin
 
PDF
Будущее WordPress (SPB, 2014)
Konstantin Kovshenin
 
PDF
Road to Platform @ WordPress.com VIP Workshop 2014
Konstantin Kovshenin
 
PDF
Будущее WordPress
Konstantin Kovshenin
 
PDF
Templating WordPress
Konstantin Kovshenin
 
PDF
Как повысить скорость вашего сайта на WordPress
Konstantin Kovshenin
 
PDF
Things I Wish I Had Known Before Developing a WordPress Theme
Konstantin Kovshenin
 
PDF
7 Tips for Better WordPress Theme Development
Konstantin Kovshenin
 
Scaling out with WordPress
Konstantin Kovshenin
 
Будущее WordPress (SPB, 2014)
Konstantin Kovshenin
 
Road to Platform @ WordPress.com VIP Workshop 2014
Konstantin Kovshenin
 
Будущее WordPress
Konstantin Kovshenin
 
Templating WordPress
Konstantin Kovshenin
 
Как повысить скорость вашего сайта на WordPress
Konstantin Kovshenin
 
Things I Wish I Had Known Before Developing a WordPress Theme
Konstantin Kovshenin
 
7 Tips for Better WordPress Theme Development
Konstantin Kovshenin
 

The Settings API

  • 1. The Settings API Konstantin Kovshenin kovshenin.com
  • 2. Setting Field Section
  • 8. 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' ); }
  • 9. 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' ); }
  • 10. 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' ); }
  • 11. 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
  • 12. 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' ); }
  • 13. 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' ); }
  • 14. 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' ); }
  • 15. register_setting() add_settings_section() add_settings_field() ref: http://codex.wordpress.org/Settings_API
  • 16. 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' ); }
  • 17. 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
  • 18. 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’ );
  • 19. 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
  • 20. 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' ); }
  • 21. 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' ); }
  • 22. 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', ... );
  • 23. 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
  • 24. 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' ); }
  • 25. 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' ); }
  • 26. 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', ... );
  • 27. 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' ); }
  • 28. 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' ); }
  • 29. function section_one_callback() { echo 'Some help text goes here.'; }
  • 30. 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' );
  • 31. 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' ); }
  • 32. 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 }
  • 33. 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 }
  • 34. 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' );
  • 35. 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', ... );
  • 36. 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
  • 38. Recap
  • 42. Using Arrays with the Settings API
  • 43. register_setting( 'my-settings-group', 'color' ); register_setting( 'my-settings-group', 'size' ); register_setting( 'my-settings-group', 'quantity' );
  • 45. 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' />"; }
  • 48. function my_settings_sanitize( $input ) { $input['quantity'] = absint( $input['quantity'] ); return $input; }
  • 50. 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; }
  • 51. Reusing Controls with the Settings API
  • 52. add_settings_field( 'email', 'E-mail', 'my_text_input', 'my-plugin', 'section-one', array( 'name' => 'my-settings[email]', 'value' => $settings['email'], ) );
  • 53. function my_text_input( $args ) { $name = esc_attr( $args['name'] ); $value = esc_attr( $args['value'] ); echo "<input type='text' name='$name' value='$value' />"; }