WordCamp
                Montreal 2011


Custom Themes from Scratch using a
        Theme Framework

      @ptahdunbar - #wcmtl
Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Ptah Dunbar
   • WordPress Core Contributor
    – Over 30+ commit props
    – Worked heavily on the nav menus in 3.0
    – First patch was just over 9 months ago

   •   WordPress Consulting in Miami Beach
    – Creative WordPress Solutions
    – Office + Two partners + an intern

   •   I love to Travel
    – Aspiring World Traveler
    – First time in Canada!
    – Previously visited Atlanta, Luxembourg, Thailand, San

   • Languages
    – Currently learning spanish as well as improving french & german fluency.
Custom Themes from Scratch using a Theme Framework — @ptahdunbar                 #wcmtl
Creating a modern WordPress theme is detail work.




   For a full reference, visit:
       ➡ http://codex.wordpress.org/Theme_Development
       ➡ http://codex.wordpress.org/Theme_Review
Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Why Theme Frameworks?


               • Empowering users

               • To make theme development more fun

               • Because it’s what the cools kids do.




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
What makes a Theme Framework?

           • Functions.php
               Loaded on every page before the page is displayed


           • WordPress Plugin API
               Allows developers to “hook” into the WordPress code and execute
               functionality without editing the WordPress core files.


           • Child Theme Template Inheritance
               Child themes template files override template files from the
               parent theme.




Custom Themes from Scratch using a Theme Framework — @ptahdunbar              #wcmtl
Two Types of
                  Theme Frameworks

‣ User-based Theme Frameworks
     – Provides you with various types of options to control
       aspects of your theme without editing template files

‣ Designer/Developer-based Theme Frameworks
     – Code-oriented, tradition template system, starter-based




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Theme Framework Continuum


   User-Based                                                      DD-based Theme
Theme Frameworks                                                    Frameworks




Custom Themes from Scratch using a Theme Framework — @ptahdunbar               #wcmtl
Theme Framework Continuum

                                                                   Sandbox


   User-Based                                                      DD-based Theme
Theme Frameworks                                                    Frameworks




                                                                    Thematic




                                                                     Hybrid




Custom Themes from Scratch using a Theme Framework — @ptahdunbar               #wcmtl
Theme Framework Continuum

                                           WP Framework            Sandbox


   User-Based                                                      DD-based Theme
Theme Frameworks                                                    Frameworks




                                                                    Thematic




                                                                     Hybrid




Custom Themes from Scratch using a Theme Framework — @ptahdunbar               #wcmtl
Thesis by DIYThemes




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Headway by Headway Themes




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Genesis by StudioPress




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Sandbox theme by Scott Wallick




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Starkers by Elliot Jay Stocks




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Whiteboard by Bold Perspecive Labs




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Top 10
              WP Framework
                Features

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                            has
              Organization

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Organization

   ‣ THEME_CSS
   ‣ THEME_JS
   ‣ THEME_IMG

   ‣   CHILD_THEME_CSS
   ‣   CHILD_THEME_JS
   ‣   CHILD_THEME_IMG



   ‣ Add your own:
   ‣ wpf_templating_constants




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                          does
  Rapid Development


Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Rapid Theming with WP Framework

‣ Stylesheets
     – reset.css
     – typography.css
     – master.css

‣ Javascripting
     – scripts.js with jQuery loaded


‣ Custom Functions
     – custom-functions.php

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                            has
             HTML5/CSS3

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                            has
    Device Detection

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                        has a
      CSS Framework

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
RYO.GS
                            Roll Your Own Grid System

         <link rel="stylesheet" type="text/css" media="all"
         href="<?php echo ryogs( '18', '28', '28', '28' ); ?>" />

                      1. Number of Columns (in pixels)
                      2. Width of Columns (in pixels)
                      3. Width of Gutters (in pixels)
                      4. Base-line height (in pixels)




Custom Themes from Scratch using a Theme Framework — @ptahdunbar    #wcmtl
CSS Grids in WP Framework




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                            has
         Theme Options

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
add_theme_support( ‘theme-options’ );




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
add_theme_support( ‘theme-options’ );




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
wpf_register_metabox( $page_slug, $id, $title, $column, $priority );




       function theme_options() {

           wpf_add_metabox(     'options',   'aioseo', 'All in one SEO', 1 );
           wpf_add_metabox(     'options',   'scripts', 'Theme Scripts', 2 );
           wpf_add_metabox(     'options',   'robots', 'General Settings', 3 );
           wpf_add_metabox(     'options',   'info', 'Theme Information', 4 );

       }




Custom Themes from Scratch using a Theme Framework — @ptahdunbar                  #wcmtl
Theme Options API
                                         Example Usage




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
wpf_add_setting( $metabox_id, $option_id, $args, $data );




wpf_add_metabox( 'options', 'general', __( 'General Settings', t() ) );
wpf_add_setting( 'general', 'textbox', array( 'type' => 'textbox', 'label' => __( 'This is a sample textbox', t() ) ) );
wpf_add_setting( 'scripts', 'textarea', array( 'type' => 'textarea', 'label' => __( 'This is a sample textarea', t() ) ) );
wpf_add_setting( 'scripts', 'checkbox', array( 'type' => 'checkbox', 'label' => __( 'This is a sample checkbox', t() ) ) );
wpf_add_setting( 'scripts', 'multi-checkbox', array( 'type' => 'checkbox', 'label' => __( 'Choose your Taste:', t() ) ),
array( 'Vanilla', 'Strawberry', 'Chocolate' ) );
wpf_add_setting( 'general', 'custom', array( 'type' => 'custom' ), __( 'This is custom! Here's an hr tag:', t() ) );
wpf_add_setting( 'aioseo', 'multi-radio', array( 'type' => 'radio', 'label' => __( 'Which Color?', t() ) ), array( 'Blue', 'Green',
'Yellow' ) );
wpf_add_setting( 'aioseo', 'select', array( 'type' => 'select', 'label' => 'Choose an option:' ), array( 'Option #1', 'Option
#2', 'Option #3' ) );
wpf_add_setting( 'general', 'multi-select', array( 'type' => 'select', 'label' => 'Choose multiple options:', 'multiple' =>
true ), array( 'Option #1', 'Option #2', 'Option #3' ) );
wpf_add_setting( 'scripts', 'upload', array( 'type' => 'upload', 'label' => 'Upload a Logo:' ) );
wpf_add_setting( 'scripts', 'color', array( 'type' => 'color', 'label' => 'Choose your Color:' ) );
wpf_add_setting( 'info', 'callback', array( 'type' => 'callback' ), 'foobar' );




 Custom Themes from Scratch using a Theme Framework — @ptahdunbar                                                         #wcmtl
Theme Options API
                                         Example Usage




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                            has
         Theme Options
             API
Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Theme Options API
                           Store global theme metadata



                      • add_theme_option();
                      • get_theme_option();
                      • update_theme_option();
                      • delete_theme_option();


Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Backend
   wpf_add_setting( 'aioseo', 'seo-title', 'checkbox',
   array( 'label' => 'Append site name to page titles' ) );




                                      Front End
      <?php get_theme_option(‘seo-title’); ?>




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                  does
          Future Proof Theming


Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Bad

    index.php file:


   <?php plugin_function_in_template(); ?>




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
GOOD
    index.php file:


   <?php do_action( ‘before_content’ ); ?>


    plugin file:


     add_action(‘before_content’,‘plugin_function_in_template’);




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
WP Framework
                                               is
                        Pluggable

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
wpf_register_class( $handle, $class );

    file: custom-functions.php
    add_action( ‘wpf_init’, ‘register_theme_classes’ );

    function register_theme_classes() {
       wpf_register_class( ‘theme’, ‘Custom_Theme’ );
    }

    class Custom_Theme extends WPF {
       function Custom_Theme() {
          $this->WPF( array(
             ‘content_width’ => 500,
             ‘text_domain’ => ‘custom-theme’,
          ) );
       }
    }



Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
wpf_register_class( ‘theme’, ‘WPF’ );

    file: class-wpf-template-tags.php

    class WPF extends WPF_Template_Tags {

        ...

        function site_title() {
        	    $args = $this->parse_attrs( $args );
        	    $tag = ( is_home() || is_front_page() ) ? 'h1' : 'div';
        	    printf( '<%s><span><a href="%s" title="%s" rel="home">%3$s</a></span></
        %1$s>', $tag, site_url('/'), esc_attr( get_bloginfo('name') ) );
        }
    }




Custom Themes from Scratch using a Theme Framework — @ptahdunbar                   #wcmtl
wpf_register_class( ‘theme’, ‘Custom_Theme’ );

 file: custom-functions.php
 add_action( ‘wpf_init’, ‘register_theme_classes’ );

 function register_theme_classes() {
    wpf_register_class( ‘theme’, ‘Custom_Theme’ );
 }

 class Custom_Theme extends WPF {
    function Custom_Theme() {
       $this->WPF( array(
           ‘content_width’ => 500,
           ‘text_domain’ => ‘custom-theme’,
       ) );
    }

     function site_title() {
        echo ‘<h1>’. get_bloginfo('name') .’<h1>’;
     }
 }


Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
wpf_register_contextual_class( $handle, $class );
 file: custom-functions.php
 add_action( ‘wpf_init’, ‘register_theme_classes’ );

 function register_theme_classes() {
    wpf_register_contextual_class( ‘assets’, ‘Theme_Assets’ );
 }

 class Theme_Assets {
    function Theme_Assets() {
       // runs on every page
    }

     function front_page() {
        // runs only on the front page
     }
 }



Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
wpf_register_contextual_class( $handle, $class );

  wpf_load_contextual_classes();                       wpf_template_hierarchy();

                                                       is_front_page()
                                                       is_home()
                                                       is_singular()
                                                       is_archive()
                                                       is_tax()
                                                       is_category()
                                                       is_tag()
                                                       is_author()
                                                       is_date()
                                                       is_year()
                                                       is_month()
                                                       get_query_var( 'w' )
                                                       is_day()
                                                       is_search()
                                                       is_404()

Custom Themes from Scratch using a Theme Framework — @ptahdunbar                   #wcmtl
WP Framework
                                  supports
                     BuddyPress

Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
Demo


Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl
That’s all folks.
                                         Questions?




Custom Themes from Scratch using a Theme Framework — @ptahdunbar   #wcmtl

More Related Content

PPT
WordCamp Miami 09 - WP Framework
KEY
wcmia2011
KEY
Wcphx 2012-workshop
PDF
Intro to Web Development
PDF
All about word press
PDF
Child Theme
PPTX
"Ensuring chances of theme acceptance in wordpress.org directory" on WordCamp...
PDF
Seven deadly theming sins
WordCamp Miami 09 - WP Framework
wcmia2011
Wcphx 2012-workshop
Intro to Web Development
All about word press
Child Theme
"Ensuring chances of theme acceptance in wordpress.org directory" on WordCamp...
Seven deadly theming sins

What's hot (20)

PDF
Cms & wordpress theme development 2011
PDF
Bootstrap 3 Basic - Bangkok WordPress Meetup
PPTX
NEPA BlogCon 2013 - WordPress Customization & Security
PPTX
WordPress Customization and Security
PDF
What Is WordPress and Why Is Everyone Talking About It?
KEY
&lt;?php + WordPress
PDF
Drupal Flyover, CMS Expo
PDF
Theming in WordPress - Where do I Start?
PPTX
Reno-Tahoe WordCamp 2011 - WordPress End User Security - Dre Armeda
PDF
Git Makes Me Angry Inside
PDF
What Is WordPress and Why Is Everyone Talking About It
PDF
Managing a Project the Drupal Way - Drupal Open Days Ireland
PDF
WordPress Theme Structure
PDF
Haml And Sass In 15 Minutes
PPT
Blogging for family historians
PPTX
Using Display Suite / Context to Build your Drupal Site
PPTX
Child Theming: An Introduction to Wordpress Theme Development with Wordpres...
PDF
光速テーマ開発のコツ
PDF
WordCamp Raleigh 2019 - Beginner's Guide to Wordpress
PDF
PHPをさわらず作る!デザイナーさんのためのWordPress【超!初級】
Cms & wordpress theme development 2011
Bootstrap 3 Basic - Bangkok WordPress Meetup
NEPA BlogCon 2013 - WordPress Customization & Security
WordPress Customization and Security
What Is WordPress and Why Is Everyone Talking About It?
&lt;?php + WordPress
Drupal Flyover, CMS Expo
Theming in WordPress - Where do I Start?
Reno-Tahoe WordCamp 2011 - WordPress End User Security - Dre Armeda
Git Makes Me Angry Inside
What Is WordPress and Why Is Everyone Talking About It
Managing a Project the Drupal Way - Drupal Open Days Ireland
WordPress Theme Structure
Haml And Sass In 15 Minutes
Blogging for family historians
Using Display Suite / Context to Build your Drupal Site
Child Theming: An Introduction to Wordpress Theme Development with Wordpres...
光速テーマ開発のコツ
WordCamp Raleigh 2019 - Beginner's Guide to Wordpress
PHPをさわらず作る!デザイナーさんのためのWordPress【超!初級】
Ad

Viewers also liked (19)

PPTX
Auca ramon llull 2
PDF
Projecto Curricular Do Ji Vg 10 11
PPS
La reforma laboral del PP de Rajoy
PDF
Cohetería agua experimental.
PDF
Kiddicare eCommerce case study
PPT
Articulos,SDS
PDF
Makfry Group catalogo italiano
PDF
Digestivo morfo2009 externo
XLS
ESTADISTICA DE LA NTIC
PPT
We Love コンビニ
PPT
La génesis mosaica y el Espiritismo
DOC
Producto1 antonio ortavazquez
PPTX
Fasterner Marketing Plan 2016
PPTX
Keynote talk at Financial Times Forum - BigData and Advanced Analytics at SIB...
DOCX
Control de lectura de pedro páramo
PDF
Documento de subredes_traducido_al_español
DOCX
Cuadernillo de fisica
PPTX
Los receptores
PDF
Antrag-auf-Beibehaltung
Auca ramon llull 2
Projecto Curricular Do Ji Vg 10 11
La reforma laboral del PP de Rajoy
Cohetería agua experimental.
Kiddicare eCommerce case study
Articulos,SDS
Makfry Group catalogo italiano
Digestivo morfo2009 externo
ESTADISTICA DE LA NTIC
We Love コンビニ
La génesis mosaica y el Espiritismo
Producto1 antonio ortavazquez
Fasterner Marketing Plan 2016
Keynote talk at Financial Times Forum - BigData and Advanced Analytics at SIB...
Control de lectura de pedro páramo
Documento de subredes_traducido_al_español
Cuadernillo de fisica
Los receptores
Antrag-auf-Beibehaltung
Ad

Similar to @wcmtl (20)

PPTX
IBM Digital Experience Theme Customization
PDF
Vinay Paudel: Optimizing and Speeding up a WordPress site
PPTX
Wordpress optimization
PPTX
Responsive themeworkshop wcneo2016
PPSX
WordPress Theme Design and Development Workshop - Day 2
PPTX
Starting WordPress Theme Review
PDF
Adopt or hack - how to hack a theme in a Drupal way
PPTX
WP Joburg Meetup 10: Genesis Framework by Trish Cornelius
PPTX
Building Potent WordPress Websites
PPTX
Wp responsive-theme-framework
PPTX
The Way to Theme Enlightenment 2017
PPTX
The Way to Theme Enlightenment
PDF
Adobe MAX 2008: HTML/CSS + Fireworks
PPTX
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant
PPTX
Introduction to HTML language Web design.pptx
PPTX
Php on the Web and Desktop
KEY
Twig for Drupal @ Frontendunited Amsterdam 2012
PDF
Twig, the flexible, fast, and secure template language for PHP
ODP
Drupal Themes
PDF
WordPress Theme and Plugin Optimization - WordPress Arvika March '14
IBM Digital Experience Theme Customization
Vinay Paudel: Optimizing and Speeding up a WordPress site
Wordpress optimization
Responsive themeworkshop wcneo2016
WordPress Theme Design and Development Workshop - Day 2
Starting WordPress Theme Review
Adopt or hack - how to hack a theme in a Drupal way
WP Joburg Meetup 10: Genesis Framework by Trish Cornelius
Building Potent WordPress Websites
Wp responsive-theme-framework
The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment
Adobe MAX 2008: HTML/CSS + Fireworks
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant
Introduction to HTML language Web design.pptx
Php on the Web and Desktop
Twig for Drupal @ Frontendunited Amsterdam 2012
Twig, the flexible, fast, and secure template language for PHP
Drupal Themes
WordPress Theme and Plugin Optimization - WordPress Arvika March '14

Recently uploaded (20)

PPTX
Internet of Everything -Basic concepts details
PDF
“The Future of Visual AI: Efficient Multimodal Intelligence,” a Keynote Prese...
DOCX
Basics of Cloud Computing - Cloud Ecosystem
PDF
Auditboard EB SOX Playbook 2023 edition.
PDF
Transform-Your-Supply-Chain-with-AI-Driven-Quality-Engineering.pdf
PDF
Improvisation in detection of pomegranate leaf disease using transfer learni...
PDF
Early detection and classification of bone marrow changes in lumbar vertebrae...
PDF
Connector Corner: Transform Unstructured Documents with Agentic Automation
PDF
Planning-an-Audit-A-How-To-Guide-Checklist-WP.pdf
PDF
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
PDF
MENA-ECEONOMIC-CONTEXT-VC MENA-ECEONOMIC
PDF
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
PDF
NewMind AI Weekly Chronicles – August ’25 Week IV
PDF
Electrocardiogram sequences data analytics and classification using unsupervi...
PDF
IT-ITes Industry bjjbnkmkhkhknbmhkhmjhjkhj
PPTX
Module 1 Introduction to Web Programming .pptx
PDF
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
PDF
SaaS reusability assessment using machine learning techniques
PDF
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
PDF
A hybrid framework for wild animal classification using fine-tuned DenseNet12...
Internet of Everything -Basic concepts details
“The Future of Visual AI: Efficient Multimodal Intelligence,” a Keynote Prese...
Basics of Cloud Computing - Cloud Ecosystem
Auditboard EB SOX Playbook 2023 edition.
Transform-Your-Supply-Chain-with-AI-Driven-Quality-Engineering.pdf
Improvisation in detection of pomegranate leaf disease using transfer learni...
Early detection and classification of bone marrow changes in lumbar vertebrae...
Connector Corner: Transform Unstructured Documents with Agentic Automation
Planning-an-Audit-A-How-To-Guide-Checklist-WP.pdf
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
MENA-ECEONOMIC-CONTEXT-VC MENA-ECEONOMIC
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
NewMind AI Weekly Chronicles – August ’25 Week IV
Electrocardiogram sequences data analytics and classification using unsupervi...
IT-ITes Industry bjjbnkmkhkhknbmhkhmjhjkhj
Module 1 Introduction to Web Programming .pptx
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
SaaS reusability assessment using machine learning techniques
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
A hybrid framework for wild animal classification using fine-tuned DenseNet12...

@wcmtl

  • 1. WordCamp Montreal 2011 Custom Themes from Scratch using a Theme Framework @ptahdunbar - #wcmtl
  • 2. Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 3. Ptah Dunbar • WordPress Core Contributor – Over 30+ commit props – Worked heavily on the nav menus in 3.0 – First patch was just over 9 months ago • WordPress Consulting in Miami Beach – Creative WordPress Solutions – Office + Two partners + an intern • I love to Travel – Aspiring World Traveler – First time in Canada! – Previously visited Atlanta, Luxembourg, Thailand, San • Languages – Currently learning spanish as well as improving french & german fluency. Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 4. Creating a modern WordPress theme is detail work. For a full reference, visit: ➡ http://codex.wordpress.org/Theme_Development ➡ http://codex.wordpress.org/Theme_Review Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 5. Why Theme Frameworks? • Empowering users • To make theme development more fun • Because it’s what the cools kids do. Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 6. What makes a Theme Framework? • Functions.php Loaded on every page before the page is displayed • WordPress Plugin API Allows developers to “hook” into the WordPress code and execute functionality without editing the WordPress core files. • Child Theme Template Inheritance Child themes template files override template files from the parent theme. Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 7. Two Types of Theme Frameworks ‣ User-based Theme Frameworks – Provides you with various types of options to control aspects of your theme without editing template files ‣ Designer/Developer-based Theme Frameworks – Code-oriented, tradition template system, starter-based Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 8. Theme Framework Continuum User-Based DD-based Theme Theme Frameworks Frameworks Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 9. Theme Framework Continuum Sandbox User-Based DD-based Theme Theme Frameworks Frameworks Thematic Hybrid Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 10. Theme Framework Continuum WP Framework Sandbox User-Based DD-based Theme Theme Frameworks Frameworks Thematic Hybrid Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 11. Thesis by DIYThemes Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 12. Headway by Headway Themes Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 13. Genesis by StudioPress Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 14. Sandbox theme by Scott Wallick Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 15. Starkers by Elliot Jay Stocks Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 16. Whiteboard by Bold Perspecive Labs Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 17. Top 10 WP Framework Features Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 18. WP Framework has Organization Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 19. Organization ‣ THEME_CSS ‣ THEME_JS ‣ THEME_IMG ‣ CHILD_THEME_CSS ‣ CHILD_THEME_JS ‣ CHILD_THEME_IMG ‣ Add your own: ‣ wpf_templating_constants Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 20. WP Framework does Rapid Development Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 21. Rapid Theming with WP Framework ‣ Stylesheets – reset.css – typography.css – master.css ‣ Javascripting – scripts.js with jQuery loaded ‣ Custom Functions – custom-functions.php Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 22. WP Framework has HTML5/CSS3 Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 23. WP Framework has Device Detection Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 24. WP Framework has a CSS Framework Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 25. RYO.GS Roll Your Own Grid System <link rel="stylesheet" type="text/css" media="all" href="<?php echo ryogs( '18', '28', '28', '28' ); ?>" /> 1. Number of Columns (in pixels) 2. Width of Columns (in pixels) 3. Width of Gutters (in pixels) 4. Base-line height (in pixels) Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 26. CSS Grids in WP Framework Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 27. WP Framework has Theme Options Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 28. add_theme_support( ‘theme-options’ ); Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 29. add_theme_support( ‘theme-options’ ); Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 30. wpf_register_metabox( $page_slug, $id, $title, $column, $priority ); function theme_options() { wpf_add_metabox( 'options', 'aioseo', 'All in one SEO', 1 ); wpf_add_metabox( 'options', 'scripts', 'Theme Scripts', 2 ); wpf_add_metabox( 'options', 'robots', 'General Settings', 3 ); wpf_add_metabox( 'options', 'info', 'Theme Information', 4 ); } Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 31. Theme Options API Example Usage Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 32. wpf_add_setting( $metabox_id, $option_id, $args, $data ); wpf_add_metabox( 'options', 'general', __( 'General Settings', t() ) ); wpf_add_setting( 'general', 'textbox', array( 'type' => 'textbox', 'label' => __( 'This is a sample textbox', t() ) ) ); wpf_add_setting( 'scripts', 'textarea', array( 'type' => 'textarea', 'label' => __( 'This is a sample textarea', t() ) ) ); wpf_add_setting( 'scripts', 'checkbox', array( 'type' => 'checkbox', 'label' => __( 'This is a sample checkbox', t() ) ) ); wpf_add_setting( 'scripts', 'multi-checkbox', array( 'type' => 'checkbox', 'label' => __( 'Choose your Taste:', t() ) ), array( 'Vanilla', 'Strawberry', 'Chocolate' ) ); wpf_add_setting( 'general', 'custom', array( 'type' => 'custom' ), __( 'This is custom! Here's an hr tag:', t() ) ); wpf_add_setting( 'aioseo', 'multi-radio', array( 'type' => 'radio', 'label' => __( 'Which Color?', t() ) ), array( 'Blue', 'Green', 'Yellow' ) ); wpf_add_setting( 'aioseo', 'select', array( 'type' => 'select', 'label' => 'Choose an option:' ), array( 'Option #1', 'Option #2', 'Option #3' ) ); wpf_add_setting( 'general', 'multi-select', array( 'type' => 'select', 'label' => 'Choose multiple options:', 'multiple' => true ), array( 'Option #1', 'Option #2', 'Option #3' ) ); wpf_add_setting( 'scripts', 'upload', array( 'type' => 'upload', 'label' => 'Upload a Logo:' ) ); wpf_add_setting( 'scripts', 'color', array( 'type' => 'color', 'label' => 'Choose your Color:' ) ); wpf_add_setting( 'info', 'callback', array( 'type' => 'callback' ), 'foobar' ); Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 33. Theme Options API Example Usage Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 34. WP Framework has Theme Options API Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 35. Theme Options API Store global theme metadata • add_theme_option(); • get_theme_option(); • update_theme_option(); • delete_theme_option(); Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 36. Backend wpf_add_setting( 'aioseo', 'seo-title', 'checkbox', array( 'label' => 'Append site name to page titles' ) ); Front End <?php get_theme_option(‘seo-title’); ?> Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 37. WP Framework does Future Proof Theming Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 38. Bad index.php file: <?php plugin_function_in_template(); ?> Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 39. GOOD index.php file: <?php do_action( ‘before_content’ ); ?> plugin file: add_action(‘before_content’,‘plugin_function_in_template’); Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 40. Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 41. WP Framework is Pluggable Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 42. wpf_register_class( $handle, $class ); file: custom-functions.php add_action( ‘wpf_init’, ‘register_theme_classes’ ); function register_theme_classes() { wpf_register_class( ‘theme’, ‘Custom_Theme’ ); } class Custom_Theme extends WPF { function Custom_Theme() { $this->WPF( array( ‘content_width’ => 500, ‘text_domain’ => ‘custom-theme’, ) ); } } Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 43. wpf_register_class( ‘theme’, ‘WPF’ ); file: class-wpf-template-tags.php class WPF extends WPF_Template_Tags { ... function site_title() { $args = $this->parse_attrs( $args ); $tag = ( is_home() || is_front_page() ) ? 'h1' : 'div'; printf( '<%s><span><a href="%s" title="%s" rel="home">%3$s</a></span></ %1$s>', $tag, site_url('/'), esc_attr( get_bloginfo('name') ) ); } } Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 44. wpf_register_class( ‘theme’, ‘Custom_Theme’ ); file: custom-functions.php add_action( ‘wpf_init’, ‘register_theme_classes’ ); function register_theme_classes() { wpf_register_class( ‘theme’, ‘Custom_Theme’ ); } class Custom_Theme extends WPF { function Custom_Theme() { $this->WPF( array( ‘content_width’ => 500, ‘text_domain’ => ‘custom-theme’, ) ); } function site_title() { echo ‘<h1>’. get_bloginfo('name') .’<h1>’; } } Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 45. wpf_register_contextual_class( $handle, $class ); file: custom-functions.php add_action( ‘wpf_init’, ‘register_theme_classes’ ); function register_theme_classes() { wpf_register_contextual_class( ‘assets’, ‘Theme_Assets’ ); } class Theme_Assets { function Theme_Assets() { // runs on every page } function front_page() { // runs only on the front page } } Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 46. wpf_register_contextual_class( $handle, $class ); wpf_load_contextual_classes(); wpf_template_hierarchy(); is_front_page() is_home() is_singular() is_archive() is_tax() is_category() is_tag() is_author() is_date() is_year() is_month() get_query_var( 'w' ) is_day() is_search() is_404() Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 47. WP Framework supports BuddyPress Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 48. Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 49. Demo Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl
  • 50. That’s all folks. Questions? Custom Themes from Scratch using a Theme Framework — @ptahdunbar #wcmtl

Editor's Notes

  • #2: \n
  • #3: How to pronounce my name :)\n
  • #4: \n
  • #5: \n
  • #6: \n
  • #7: \n
  • #8: \n
  • #9: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #10: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #11: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #12: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #13: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #14: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #15: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #16: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #17: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #18: required files, then talk about all the other optional templates\n
  • #19: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #20: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #21: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #22: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #23: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #24: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #25: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #26: \n
  • #27: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #28: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #29: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #30: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #31: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #32: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #33: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #34: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #35: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #36: \n
  • #37: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #38: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #39: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #40: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #41: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #42: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #43: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #44: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #45: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #46: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #47: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #48: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #49: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #50: The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\n
  • #51: \n