SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
The Settings API
  Konstantin Kovshenin
  kovshenin.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' />";
}
WordPress Settings API Guide - Create Admin Plugin Options Pages
WordPress Settings API Guide - Create Admin Plugin Options Pages
WordPress Settings API Guide - Create Admin Plugin Options Pages

Contenu connexe

Tendances

Using and reusing CakePHP plugins
Using and reusing CakePHP pluginsUsing and reusing CakePHP plugins
Using and reusing CakePHP pluginsPierre MARTIN
 
sfDay Cologne - Sonata Admin Bundle
sfDay Cologne - Sonata Admin BundlesfDay Cologne - Sonata Admin Bundle
sfDay Cologne - Sonata Admin Bundleth0masr
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说Ting Lv
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Atwix
 
Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5성일 한
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsFelix Arntz
 
Magento 2 | Declarative schema
Magento 2 | Declarative schemaMagento 2 | Declarative schema
Magento 2 | Declarative schemaKiel Pykett
 
jQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a TreejQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a Treeadamlogic
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxMichelangelo van Dam
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowVrann Tulika
 
Empowering users: modifying the admin experience
Empowering users: modifying the admin experienceEmpowering users: modifying the admin experience
Empowering users: modifying the admin experienceBeth Soderberg
 
Data20161007
Data20161007Data20161007
Data20161007capegmail
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11Michelangelo van Dam
 
망고100 보드로 놀아보자 18
망고100 보드로 놀아보자 18망고100 보드로 놀아보자 18
망고100 보드로 놀아보자 18종인 전
 
RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”apostlion
 

Tendances (20)

Using and reusing CakePHP plugins
Using and reusing CakePHP pluginsUsing and reusing CakePHP plugins
Using and reusing CakePHP plugins
 
Pengenalan blaast platform sdk
Pengenalan blaast platform sdkPengenalan blaast platform sdk
Pengenalan blaast platform sdk
 
Keeping It Simple
Keeping It SimpleKeeping It Simple
Keeping It Simple
 
sfDay Cologne - Sonata Admin Bundle
sfDay Cologne - Sonata Admin BundlesfDay Cologne - Sonata Admin Bundle
sfDay Cologne - Sonata Admin Bundle
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
 
Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5
 
Jquery examples
Jquery examplesJquery examples
Jquery examples
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
Magento 2 | Declarative schema
Magento 2 | Declarative schemaMagento 2 | Declarative schema
Magento 2 | Declarative schema
 
jQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a TreejQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a Tree
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
 
Empowering users: modifying the admin experience
Empowering users: modifying the admin experienceEmpowering users: modifying the admin experience
Empowering users: modifying the admin experience
 
Data20161007
Data20161007Data20161007
Data20161007
 
Amp Up Your Admin
Amp Up Your AdminAmp Up Your Admin
Amp Up Your Admin
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11
 
망고100 보드로 놀아보자 18
망고100 보드로 놀아보자 18망고100 보드로 놀아보자 18
망고100 보드로 놀아보자 18
 
RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”RubyBarCamp “Полезные gems и plugins”
RubyBarCamp “Полезные gems и plugins”
 
Bacbkone js
Bacbkone jsBacbkone js
Bacbkone js
 

En vedette

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

En vedette (9)

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

Similaire à WordPress Settings API Guide - Create Admin Plugin Options Pages

WordPress plugin #3
WordPress plugin #3WordPress plugin #3
WordPress plugin #3giwoolee
 
Gail villanueva add muscle to your wordpress site
Gail villanueva   add muscle to your wordpress siteGail villanueva   add muscle to your wordpress site
Gail villanueva add muscle to your wordpress sitereferences
 
Working with WooCommerce Custom Fields
Working with WooCommerce Custom FieldsWorking with WooCommerce Custom Fields
Working with WooCommerce Custom FieldsAnthony Hortin
 
Gutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesGutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesRiad Benguella
 
How to Create A Magento Adminhtml Controller in Magento Extension
How to Create A Magento Adminhtml Controller in Magento ExtensionHow to Create A Magento Adminhtml Controller in Magento Extension
How to Create A Magento Adminhtml Controller in Magento ExtensionHendy Irawan
 
Dig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup CairoDig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup CairoMohamed Mosaad
 
날로 먹는 Django admin 활용
날로 먹는 Django admin 활용날로 먹는 Django admin 활용
날로 먹는 Django admin 활용KyeongMook "Kay" Cha
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Michelangelo van Dam
 
WordPress 15th Meetup - Build a Theme
WordPress 15th Meetup - Build a ThemeWordPress 15th Meetup - Build a Theme
WordPress 15th Meetup - Build a ThemeFadi Nicolas Zahhar
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3Javier Eguiluz
 
WordPress Plugin development
WordPress Plugin developmentWordPress Plugin development
WordPress Plugin developmentMostafa Soufi
 
Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)Fabien Potencier
 
Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Djangofool2nd
 
Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)tompunk
 
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018Damien Carbery
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010Fabien Potencier
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgnitermirahman
 

Similaire à WordPress Settings API Guide - Create Admin Plugin Options Pages (20)

WordPress plugin #3
WordPress plugin #3WordPress plugin #3
WordPress plugin #3
 
WordCamp Praga 2015
WordCamp Praga 2015WordCamp Praga 2015
WordCamp Praga 2015
 
Gail villanueva add muscle to your wordpress site
Gail villanueva   add muscle to your wordpress siteGail villanueva   add muscle to your wordpress site
Gail villanueva add muscle to your wordpress site
 
Working with WooCommerce Custom Fields
Working with WooCommerce Custom FieldsWorking with WooCommerce Custom Fields
Working with WooCommerce Custom Fields
 
Gutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesGutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisables
 
How to Create A Magento Adminhtml Controller in Magento Extension
How to Create A Magento Adminhtml Controller in Magento ExtensionHow to Create A Magento Adminhtml Controller in Magento Extension
How to Create A Magento Adminhtml Controller in Magento Extension
 
Dig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup CairoDig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup Cairo
 
날로 먹는 Django admin 활용
날로 먹는 Django admin 활용날로 먹는 Django admin 활용
날로 먹는 Django admin 활용
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8
 
WordPress 15th Meetup - Build a Theme
WordPress 15th Meetup - Build a ThemeWordPress 15th Meetup - Build a Theme
WordPress 15th Meetup - Build a Theme
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3
 
WordPress Plugin development
WordPress Plugin developmentWordPress Plugin development
WordPress Plugin development
 
Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)
 
Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Django
 
Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)
 
Django Vs Rails
Django Vs RailsDjango Vs Rails
Django Vs Rails
 
Clean Javascript
Clean JavascriptClean Javascript
Clean Javascript
 
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018
Demystifying Hooks, Actions & Filters - WordCamp Belfast 2018
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgniter
 

Plus de Konstantin Kovshenin

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

Plus de Konstantin Kovshenin (8)

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

WordPress Settings API Guide - Create Admin Plugin Options Pages

  • 1. The Settings API Konstantin Kovshenin kovshenin.com
  • 2. Setting Field Section
  • 3.
  • 4.
  • 5.
  • 6.
  • 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
  • 37.
  • 38. Recap
  • 40.
  • 41.
  • 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' />"; }