SlideShare a Scribd company logo
Your Custom WordPress
Admin Pages Suck
(and how to make them unsucky)
Anthony Montalbano          @italianst4

       anthony@ambrdetroit.com
Who is Anthony Montalbano?
Passionate for code
  Bachelor's in Computer Science
Passionate for WordPress
  WordCamp Detroit Organizer, Plugin/Theme Developer

Passionate for open source
  WordPress plugin developer

Passionate for words
  Serial blogger

Passionate for possibilities
  Co-founder of flipfrog and AMBR Detroit

                                            source: iamthecoolestpersonever.com
What are you talking about?!
What are you talking about?!
What are you talking about?!
What are you talking about?!


More examples...
               http://themeoptions.wordpress.com/

A need rant...
  http://wpcandy.com/thinks/custom-admin-screens-are-the-worst

Comment rant...
    http://wpcandy.com/thinks/custom-admin-screens-are-the-
                     worst#comment-127921
What are you talking about?!



"This stuff needs
    to stop."
                           ~Ryan Imel
First World Problem?
Be a Good Guy Greg!
The WordPress
Admin
It's in the details...
The WordPress Admin

Icons
The WordPress Admin

Header
The WordPress Admin

Buttons
The WordPress Admin

Forms
The WordPress Admin

Containers
Locating your admin page


  ●   Navbar
  ●   Toolbar
  ●   Dashboard
  ●   Post Edit
  ●   Widgets
  ●   Default Admin Pages
  ●   Plugins Page
Styling
Let's make things sexy
Wrap it up!



              <div class="wrap">

                       <!-- MAGIC GOES HERE --
              >

              </div>
Admin UI Basics




            <div class="wrap">
              <h1>WordCamp Detroit</h1>
              <div id="icon-users" class="icon32"></div>
              <h2>WordCamp Detroit</h2>
              <h3>WordCamp Detroit</h3>
              <h4>WordCamp Detroit</h4>
              <span>I will make better admin UIs</span>
              <br/><br/>
              <code>jQuery('#badUI').remove();</code>
            </div>
Buttons




<div class="wrap">
  <input class="button-primary" value="<?php _e('Save Options'); ?>"
type="button" />
  <br /><br />
  <input class="button-secondary" value="<?php _e('Empty Trash'); ?>"
type="button" />
  <br /><br />
  <a href="#" class="button-secondary">Don't click me</a>
</div>
Notices




<div class="wrap">
  <div class="updated"><p>Settings are saved!</p></div>
  <div class="error"><p>Oh no, it failed</p></div>
</div>
Forms
Forms (continued)
<div class="wrap">
  <form method="POST" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
    <table class="form-table">
      <tr valign="top">
        <th scope="row">
          <label for="name">Name<span> *</span></label>
        </th>
        <td>
          <input id="name" maxlength="45" size="10" name="name" value=""
type="text" />
          <p class="description">What do they call you?</p>
        </td>
      </tr>
      <tr valign="top">
        <th scope="row">
          <label for="gender">Gender<span> *</span></label>
        </th>
        <td>
          <select id="gender" name="gender">
             <option value="male">Male<option>
             <option value="female">Female<option>
          </select>
        </td>
      </tr>
Forms (continued, again)
<tr valign="top">
        <th scope="row">
          <label for="aboutyou">About You</label>
        </th>
        <td>
          <textarea id="aboutyou"></textarea>
        </td>
      </tr>
      <tr valign="top">
        <th scope="row">
          <label for="awesome">Are you awesome?</label>
        </th>
        <td>
          <fieldset>
             <label for="awesome">
               <input id="awesome" name="awesome" value="" type="checkbox"
value="1" /> Umm, yeah!
             </label>
          </fieldset>
        </td>
      </tr>
Forms (continued, and again)
<tr>
        <th scope="row">
          <label for="color">Color</label>
        </th>
        <td>
          <fieldset>
             <legend class="screen-reader-text"><span>Date
Format</span></legend>
             <label title="red">
               <input type="radio" name="color" value="red" checked="
checked">
               <span>Red</span>
             </label><br>
             <label title="blue">
               <input type="radio" name="color" value="blue">
               <span>Blue</span>
             </label><br>
             <label title="green">
               <input type="radio" name="color" value="green">
               <span>Green</span>
             </label><br>
          </fieldset>
    </table>
  </form>
</div>
Tabs




  <div class="wrap">
    <h2 class="nav-tab-wrapper">
      Just Some Tabs
      <a href="#" class="nav-tab nav-tab-active">Tab 1</a>
      <a href="#" class="nav-tab">Tab 2</a>
    </h2>
  </div>
Static Tables




    <div class="wrap">
      <table class="widefat">
        <thead><tr>
           <th>Name</th> <th>Email</th>
        </tr></thead>
        <tfoot><tr>
           <th>Name</th> <th>Email</th>
        </tr></tfoot>
        <tbody><tr>
           <td>Anthony Montalbano</td>
    <td>anthony@ambrdetroit.com</td>
        </tr></tbody>
      </table>
    </div>
Interactive
Elements
Click, click, drag, clickity, click!
Scripts and Styles
There are many cases where you may want to
include a javascript or style sheet with your
plugin. WordPress has this functionality built
in. By default WordPress has many scripts
included, such as jQuery.

       http://codex.wordpress.org/Function_Reference/wp_enqueue_script
Scripts and Styles (continued)

Using a script
     <?php
     function my_scripts_method() {
         wp_enqueue_script('jquery');
     }

     add_action('wp_enqueue_scripts', 'my_scripts_method');
     ?>




Adding a new script
     wp_register_script( 'simplr', 'https://raw.github.
     com/simplrteam/SimplrJS/master/dist/simplr.min.js');
Dynamic Tables




 In the codex:
 http://codex.wordpress.org/Function_Reference/WP_List_Table

 How to:
 http://wp.smashingmagazine.com/2011/11/03/native-admin-tables-wordpress/
Pagination



   <div class="wrap">
     <div class="tablenav">
     <?php
     $posts_per_page = 15;
     $num_of_records = 500;

    $page_links = paginate_links( array(
      'base' => add_query_arg( 'paged', '%#%' ),
      'format' => '',
      'prev_text' => __('&laquo;'),
      'next_text' => __('&raquo;'),
      'total' => ceil($num_of_records/$posts_per_page),
      'current' => $_GET['paged']
    ));
Pagination (continued)
   if ( $page_links ) { ?>
       <div class="tablenav-pages">
          <?php echo sprintf( '<span class="displaying-num"
   >' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%s',
                number_format_i18n( ( $_GET['paged'] - 1 ) *
   $posts_per_page + 1 ),
                number_format_i18n( min( $_GET['paged'] *
   $posts_per_page, $num_of_records ) ),
                number_format_i18n( $num_of_records ),
                $page_links
             );
          ?>
       </div>
     <?php } ?>
     </div>
   </div>




              http://codex.wordpress.org/Function_Reference/paginate_links
Media Uploader




How to use the media uploader:
http://wp.tutsplus.com/tutorials/creative-coding/how-to-integrate-the-wordpress-media-uploader-in-
theme-and-plugin-options/
Admin Pointers




How to add pointers:
http://wp.tutsplus.com/tutorials/integrating-with-wordpress-ui-admin-pointers/
Data Retention
Maybe we should save that...
Options API


// Create an option to the database
add_option( $option, $value = , $deprecated = , $autoload = 'yes' );

// Removes option by name.
delete_option( $option );

// Fetch a saved option
get_option( $option, $default = false );

// Update the value of an option that was already added.
update_option( $option, $newvalue );




                                            http://codex.wordpress.org/Options_API
Transients API


// Set a transient
set_transient( 'special_query_results', $special_query_results, 60*60*12
);

// Remove a transient by name.
delete_transient( 'special_query_results' );

// Fetch a saved option
get_transient( 'special_query_results');




                                           http://codex.wordpress.org/Transients_API
Settings API




               http://codex.wordpress.org/Settings_API
Widget Data

class Example_Widget extends WP_Widget {
    // Displaying widget option value
    public function widget( $args, $instance ) {
         echo $instance['title'];
    }

    // Updating a widget option value
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['title'] = strip_tags( $new_instance['title'] );

        return $instance;
    }

}




                                           http://codex.wordpress.org/Widgets_API
Explore more
It's only just begun...
Admin UI Reference Plugin




Download the plugin here:
   https://github.com/bueltge/WordPress-Admin-Style
Additional Sources

UI Pattern and Style Guide
http://codex.wordpress.org/User:TECannon/UI_Pattern_and_Style_Guide

Creating Admin Themes
http://codex.wordpress.org/Creating_Admin_Themes

Posts Screen
http://codex.wordpress.org/Posts_Screen

WordPress.org Style Guide
http://dotorgstyleguide.wordpress.com/

Unofficial WordPress Plugin User Interface Guide
http://wpcandy.com/presents/wordpress-plugin-user-interface-guide
Contribute




     http://make.wordpress.org/ui/
Some final thoughts




      Keep it simple.
Some final thoughts
Thank you!

  Anthony Montalbano

      @italianst4

anthony@ambrdetroit.com

More Related Content

What's hot (20)

PDF
[ HackFest.pl 2012] Testing - what for and how
Mikstura.IT Foundation | Web & Mobile Community
 
PDF
Nanoformats
rozario
 
DOCX
Tercer trabajo de drapi 02
Jhon Silva Penekita
 
TXT
The project gutenberg e book, fairy tales from brazil, by elsie spicer
Andrei Hortúa
 
TXT
Index css history
Gaejang Guk
 
KEY
Page Caching Resurrected
Ben Scofield
 
PPT
Introduction to ZendX jQuery
dennisdc
 
PDF
Jinja2 Templates - San Francisco Flask Meetup
Alan Hamlett
 
PDF
Web Technology Lab files with practical
Nitesh Dubey
 
TXT
Test upload
Darrell Lawson Jr.
 
PDF
Stole16
rworldoffice
 
PDF
Polymer
Cyril Balit
 
DOCX
Coding part
Sanjay Gupta
 
PDF
The Thinking behind BEM
Varya Stepanova
 
PDF
Front-End Dev Tools
Netguru
 
PDF
Rapid HTML Prototyping with Bootstrap - Chris Griffith
UXPA International
 
PDF
How to create a basic template
vathur
 
KEY
Django Admin: Widgetry & Witchery
Pamela Fox
 
PDF
ActiveResource & REST
Robbert
 
PDF
Django Templates
Willy Liu
 
[ HackFest.pl 2012] Testing - what for and how
Mikstura.IT Foundation | Web & Mobile Community
 
Nanoformats
rozario
 
Tercer trabajo de drapi 02
Jhon Silva Penekita
 
The project gutenberg e book, fairy tales from brazil, by elsie spicer
Andrei Hortúa
 
Index css history
Gaejang Guk
 
Page Caching Resurrected
Ben Scofield
 
Introduction to ZendX jQuery
dennisdc
 
Jinja2 Templates - San Francisco Flask Meetup
Alan Hamlett
 
Web Technology Lab files with practical
Nitesh Dubey
 
Test upload
Darrell Lawson Jr.
 
Stole16
rworldoffice
 
Polymer
Cyril Balit
 
Coding part
Sanjay Gupta
 
The Thinking behind BEM
Varya Stepanova
 
Front-End Dev Tools
Netguru
 
Rapid HTML Prototyping with Bootstrap - Chris Griffith
UXPA International
 
How to create a basic template
vathur
 
Django Admin: Widgetry & Witchery
Pamela Fox
 
ActiveResource & REST
Robbert
 
Django Templates
Willy Liu
 

Similar to Your Custom WordPress Admin Pages Suck (20)

PDF
HTML5 and the dawn of rich mobile web applications pt 2
James Pearce
 
PDF
Enjoy the vue.js
TechExeter
 
PDF
HTML5 New and Improved
Timothy Fisher
 
PPT
Javascript
timsplin
 
PDF
Vaadin Components @ Angular U
Joonas Lehtinen
 
PDF
Action View Form Helpers - 1, Season 2
RORLAB
 
PPT
JS-05-Handlebars.ppt
fakeaccount225095
 
DOCX
Caracteristicas Basicas De Htlm
Maria S Rivera
 
KEY
Geek Moot '09 -- Smarty 101
Ted Kulp
 
PPT
Jquery presentation
guest5d87aa6
 
TXT
Private slideshow
sblackman
 
PDF
Desenvolvimento web com Ruby on Rails (parte 2)
Joao Lucas Santana
 
PDF
Django - Framework web para perfeccionistas com prazos
Igor Sobreira
 
PDF
HTML5 Essentials
Marc Grabanski
 
PDF
Bootstrap
Sarvesh Kushwaha
 
PPTX
Implementation of GUI Framework part3
masahiroookubo
 
PPTX
jQuery Mobile - Desenvolvimento para dispositivos móveis
Pablo Garrido
 
PDF
iWebkit
Ryan Chung
 
PDF
QCon 2015 - Thinking in components: A new paradigm for Web UI
Oliver Häger
 
PDF
Creating web api and consuming part 2
Dipendra Shekhawat
 
HTML5 and the dawn of rich mobile web applications pt 2
James Pearce
 
Enjoy the vue.js
TechExeter
 
HTML5 New and Improved
Timothy Fisher
 
Javascript
timsplin
 
Vaadin Components @ Angular U
Joonas Lehtinen
 
Action View Form Helpers - 1, Season 2
RORLAB
 
JS-05-Handlebars.ppt
fakeaccount225095
 
Caracteristicas Basicas De Htlm
Maria S Rivera
 
Geek Moot '09 -- Smarty 101
Ted Kulp
 
Jquery presentation
guest5d87aa6
 
Private slideshow
sblackman
 
Desenvolvimento web com Ruby on Rails (parte 2)
Joao Lucas Santana
 
Django - Framework web para perfeccionistas com prazos
Igor Sobreira
 
HTML5 Essentials
Marc Grabanski
 
Bootstrap
Sarvesh Kushwaha
 
Implementation of GUI Framework part3
masahiroookubo
 
jQuery Mobile - Desenvolvimento para dispositivos móveis
Pablo Garrido
 
iWebkit
Ryan Chung
 
QCon 2015 - Thinking in components: A new paradigm for Web UI
Oliver Häger
 
Creating web api and consuming part 2
Dipendra Shekhawat
 
Ad

More from Anthony Montalbano (13)

PDF
7 tips to better manage client expectations
Anthony Montalbano
 
PDF
Building a mini-theme with WordPress REST API
Anthony Montalbano
 
PDF
How to Execute Your Idea (v2)
Anthony Montalbano
 
PDF
Making static sites dynamic (with WordPress yo!)
Anthony Montalbano
 
PDF
WordPress REST API
Anthony Montalbano
 
PDF
Building a website with WordPress
Anthony Montalbano
 
PDF
Getting Acclimated to WordPress
Anthony Montalbano
 
PDF
How to Execute your Idea
Anthony Montalbano
 
PDF
The wp config.php
Anthony Montalbano
 
PDF
Things to think about when starting a startup
Anthony Montalbano
 
PDF
Write your first WordPress plugin
Anthony Montalbano
 
PDF
Steve Barman - CSS and WordPress
Anthony Montalbano
 
PDF
The Power of WordPress Plugins
Anthony Montalbano
 
7 tips to better manage client expectations
Anthony Montalbano
 
Building a mini-theme with WordPress REST API
Anthony Montalbano
 
How to Execute Your Idea (v2)
Anthony Montalbano
 
Making static sites dynamic (with WordPress yo!)
Anthony Montalbano
 
WordPress REST API
Anthony Montalbano
 
Building a website with WordPress
Anthony Montalbano
 
Getting Acclimated to WordPress
Anthony Montalbano
 
How to Execute your Idea
Anthony Montalbano
 
The wp config.php
Anthony Montalbano
 
Things to think about when starting a startup
Anthony Montalbano
 
Write your first WordPress plugin
Anthony Montalbano
 
Steve Barman - CSS and WordPress
Anthony Montalbano
 
The Power of WordPress Plugins
Anthony Montalbano
 
Ad

Recently uploaded (20)

PDF
CHILD RIGHTS AND PROTECTION QUESTION BANK
Dr Raja Mohammed T
 
PPTX
A PPT on Alfred Lord Tennyson's Ulysses.
Beena E S
 
PDF
People & Earth's Ecosystem -Lesson 2: People & Population
marvinnbustamante1
 
PPTX
Quarter1-English3-W4-Identifying Elements of the Story
FLORRACHELSANTOS
 
PDF
IMP NAAC-Reforms-Stakeholder-Consultation-Presentation-on-Draft-Metrics-Unive...
BHARTIWADEKAR
 
PDF
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - GLOBAL SUCCESS - CẢ NĂM - NĂM 2024 (VOCABULARY, ...
Nguyen Thanh Tu Collection
 
PPTX
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
PDF
community health nursing question paper 2.pdf
Prince kumar
 
PDF
IMP NAAC REFORMS 2024 - 10 Attributes.pdf
BHARTIWADEKAR
 
PPTX
MENINGITIS: NURSING MANAGEMENT, BACTERIAL MENINGITIS, VIRAL MENINGITIS.pptx
PRADEEP ABOTHU
 
PDF
CEREBRAL PALSY: NURSING MANAGEMENT .pdf
PRADEEP ABOTHU
 
PDF
SSHS-2025-PKLP_Quarter-1-Dr.-Kerby-Alvarez.pdf
AishahSangcopan1
 
PPTX
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
PDF
The Constitution Review Committee (CRC) has released an updated schedule for ...
nservice241
 
PDF
Zoology (Animal Physiology) practical Manual
raviralanaresh2
 
PDF
The Different Types of Non-Experimental Research
Thelma Villaflores
 
PDF
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
PPTX
STAFF DEVELOPMENT AND WELFARE: MANAGEMENT
PRADEEP ABOTHU
 
PDF
The dynastic history of the Chahmana.pdf
PrachiSontakke5
 
PDF
Isharyanti-2025-Cross Language Communication in Indonesian Language
Neny Isharyanti
 
CHILD RIGHTS AND PROTECTION QUESTION BANK
Dr Raja Mohammed T
 
A PPT on Alfred Lord Tennyson's Ulysses.
Beena E S
 
People & Earth's Ecosystem -Lesson 2: People & Population
marvinnbustamante1
 
Quarter1-English3-W4-Identifying Elements of the Story
FLORRACHELSANTOS
 
IMP NAAC-Reforms-Stakeholder-Consultation-Presentation-on-Draft-Metrics-Unive...
BHARTIWADEKAR
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - GLOBAL SUCCESS - CẢ NĂM - NĂM 2024 (VOCABULARY, ...
Nguyen Thanh Tu Collection
 
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
community health nursing question paper 2.pdf
Prince kumar
 
IMP NAAC REFORMS 2024 - 10 Attributes.pdf
BHARTIWADEKAR
 
MENINGITIS: NURSING MANAGEMENT, BACTERIAL MENINGITIS, VIRAL MENINGITIS.pptx
PRADEEP ABOTHU
 
CEREBRAL PALSY: NURSING MANAGEMENT .pdf
PRADEEP ABOTHU
 
SSHS-2025-PKLP_Quarter-1-Dr.-Kerby-Alvarez.pdf
AishahSangcopan1
 
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
The Constitution Review Committee (CRC) has released an updated schedule for ...
nservice241
 
Zoology (Animal Physiology) practical Manual
raviralanaresh2
 
The Different Types of Non-Experimental Research
Thelma Villaflores
 
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
STAFF DEVELOPMENT AND WELFARE: MANAGEMENT
PRADEEP ABOTHU
 
The dynastic history of the Chahmana.pdf
PrachiSontakke5
 
Isharyanti-2025-Cross Language Communication in Indonesian Language
Neny Isharyanti
 

Your Custom WordPress Admin Pages Suck

  • 1. Your Custom WordPress Admin Pages Suck (and how to make them unsucky) Anthony Montalbano @italianst4 [email protected]
  • 2. Who is Anthony Montalbano? Passionate for code Bachelor's in Computer Science Passionate for WordPress WordCamp Detroit Organizer, Plugin/Theme Developer Passionate for open source WordPress plugin developer Passionate for words Serial blogger Passionate for possibilities Co-founder of flipfrog and AMBR Detroit source: iamthecoolestpersonever.com
  • 3. What are you talking about?!
  • 4. What are you talking about?!
  • 5. What are you talking about?!
  • 6. What are you talking about?! More examples... http://themeoptions.wordpress.com/ A need rant... http://wpcandy.com/thinks/custom-admin-screens-are-the-worst Comment rant... http://wpcandy.com/thinks/custom-admin-screens-are-the- worst#comment-127921
  • 7. What are you talking about?! "This stuff needs to stop." ~Ryan Imel
  • 9. Be a Good Guy Greg!
  • 10. The WordPress Admin It's in the details...
  • 16. Locating your admin page ● Navbar ● Toolbar ● Dashboard ● Post Edit ● Widgets ● Default Admin Pages ● Plugins Page
  • 18. Wrap it up! <div class="wrap"> <!-- MAGIC GOES HERE -- > </div>
  • 19. Admin UI Basics <div class="wrap"> <h1>WordCamp Detroit</h1> <div id="icon-users" class="icon32"></div> <h2>WordCamp Detroit</h2> <h3>WordCamp Detroit</h3> <h4>WordCamp Detroit</h4> <span>I will make better admin UIs</span> <br/><br/> <code>jQuery('#badUI').remove();</code> </div>
  • 20. Buttons <div class="wrap"> <input class="button-primary" value="<?php _e('Save Options'); ?>" type="button" /> <br /><br /> <input class="button-secondary" value="<?php _e('Empty Trash'); ?>" type="button" /> <br /><br /> <a href="#" class="button-secondary">Don't click me</a> </div>
  • 21. Notices <div class="wrap"> <div class="updated"><p>Settings are saved!</p></div> <div class="error"><p>Oh no, it failed</p></div> </div>
  • 22. Forms
  • 23. Forms (continued) <div class="wrap"> <form method="POST" action="<?php echo $_SERVER['REQUEST_URI']; ?>"> <table class="form-table"> <tr valign="top"> <th scope="row"> <label for="name">Name<span> *</span></label> </th> <td> <input id="name" maxlength="45" size="10" name="name" value="" type="text" /> <p class="description">What do they call you?</p> </td> </tr> <tr valign="top"> <th scope="row"> <label for="gender">Gender<span> *</span></label> </th> <td> <select id="gender" name="gender"> <option value="male">Male<option> <option value="female">Female<option> </select> </td> </tr>
  • 24. Forms (continued, again) <tr valign="top"> <th scope="row"> <label for="aboutyou">About You</label> </th> <td> <textarea id="aboutyou"></textarea> </td> </tr> <tr valign="top"> <th scope="row"> <label for="awesome">Are you awesome?</label> </th> <td> <fieldset> <label for="awesome"> <input id="awesome" name="awesome" value="" type="checkbox" value="1" /> Umm, yeah! </label> </fieldset> </td> </tr>
  • 25. Forms (continued, and again) <tr> <th scope="row"> <label for="color">Color</label> </th> <td> <fieldset> <legend class="screen-reader-text"><span>Date Format</span></legend> <label title="red"> <input type="radio" name="color" value="red" checked=" checked"> <span>Red</span> </label><br> <label title="blue"> <input type="radio" name="color" value="blue"> <span>Blue</span> </label><br> <label title="green"> <input type="radio" name="color" value="green"> <span>Green</span> </label><br> </fieldset> </table> </form> </div>
  • 26. Tabs <div class="wrap"> <h2 class="nav-tab-wrapper"> Just Some Tabs <a href="#" class="nav-tab nav-tab-active">Tab 1</a> <a href="#" class="nav-tab">Tab 2</a> </h2> </div>
  • 27. Static Tables <div class="wrap"> <table class="widefat"> <thead><tr> <th>Name</th> <th>Email</th> </tr></thead> <tfoot><tr> <th>Name</th> <th>Email</th> </tr></tfoot> <tbody><tr> <td>Anthony Montalbano</td> <td>[email protected]</td> </tr></tbody> </table> </div>
  • 29. Scripts and Styles There are many cases where you may want to include a javascript or style sheet with your plugin. WordPress has this functionality built in. By default WordPress has many scripts included, such as jQuery. http://codex.wordpress.org/Function_Reference/wp_enqueue_script
  • 30. Scripts and Styles (continued) Using a script <?php function my_scripts_method() { wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', 'my_scripts_method'); ?> Adding a new script wp_register_script( 'simplr', 'https://raw.github. com/simplrteam/SimplrJS/master/dist/simplr.min.js');
  • 31. Dynamic Tables In the codex: http://codex.wordpress.org/Function_Reference/WP_List_Table How to: http://wp.smashingmagazine.com/2011/11/03/native-admin-tables-wordpress/
  • 32. Pagination <div class="wrap"> <div class="tablenav"> <?php $posts_per_page = 15; $num_of_records = 500; $page_links = paginate_links( array( 'base' => add_query_arg( 'paged', '%#%' ), 'format' => '', 'prev_text' => __('&laquo;'), 'next_text' => __('&raquo;'), 'total' => ceil($num_of_records/$posts_per_page), 'current' => $_GET['paged'] ));
  • 33. Pagination (continued) if ( $page_links ) { ?> <div class="tablenav-pages"> <?php echo sprintf( '<span class="displaying-num" >' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%s', number_format_i18n( ( $_GET['paged'] - 1 ) * $posts_per_page + 1 ), number_format_i18n( min( $_GET['paged'] * $posts_per_page, $num_of_records ) ), number_format_i18n( $num_of_records ), $page_links ); ?> </div> <?php } ?> </div> </div> http://codex.wordpress.org/Function_Reference/paginate_links
  • 34. Media Uploader How to use the media uploader: http://wp.tutsplus.com/tutorials/creative-coding/how-to-integrate-the-wordpress-media-uploader-in- theme-and-plugin-options/
  • 35. Admin Pointers How to add pointers: http://wp.tutsplus.com/tutorials/integrating-with-wordpress-ui-admin-pointers/
  • 36. Data Retention Maybe we should save that...
  • 37. Options API // Create an option to the database add_option( $option, $value = , $deprecated = , $autoload = 'yes' ); // Removes option by name. delete_option( $option ); // Fetch a saved option get_option( $option, $default = false ); // Update the value of an option that was already added. update_option( $option, $newvalue ); http://codex.wordpress.org/Options_API
  • 38. Transients API // Set a transient set_transient( 'special_query_results', $special_query_results, 60*60*12 ); // Remove a transient by name. delete_transient( 'special_query_results' ); // Fetch a saved option get_transient( 'special_query_results'); http://codex.wordpress.org/Transients_API
  • 39. Settings API http://codex.wordpress.org/Settings_API
  • 40. Widget Data class Example_Widget extends WP_Widget { // Displaying widget option value public function widget( $args, $instance ) { echo $instance['title']; } // Updating a widget option value public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = strip_tags( $new_instance['title'] ); return $instance; } } http://codex.wordpress.org/Widgets_API
  • 41. Explore more It's only just begun...
  • 42. Admin UI Reference Plugin Download the plugin here: https://github.com/bueltge/WordPress-Admin-Style
  • 43. Additional Sources UI Pattern and Style Guide http://codex.wordpress.org/User:TECannon/UI_Pattern_and_Style_Guide Creating Admin Themes http://codex.wordpress.org/Creating_Admin_Themes Posts Screen http://codex.wordpress.org/Posts_Screen WordPress.org Style Guide http://dotorgstyleguide.wordpress.com/ Unofficial WordPress Plugin User Interface Guide http://wpcandy.com/presents/wordpress-plugin-user-interface-guide
  • 44. Contribute http://make.wordpress.org/ui/
  • 45. Some final thoughts Keep it simple.
  • 47. Thank you! Anthony Montalbano @italianst4 [email protected]