SlideShare ist ein Scribd-Unternehmen logo
1 von 50
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

Weitere ähnliche Inhalte

Was ist angesagt?

WordPress Customization and Security
WordPress Customization and SecurityWordPress Customization and Security
WordPress Customization and Security
Joe Casabona
 
Haml And Sass In 15 Minutes
Haml And Sass In 15 MinutesHaml And Sass In 15 Minutes
Haml And Sass In 15 Minutes
Patrick Crowley
 

Was ist angesagt? (20)

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

Andere mochten auch

Auca ramon llull 2
Auca ramon llull 2Auca ramon llull 2
Auca ramon llull 2
Toni Blanes
 
Projecto Curricular Do Ji Vg 10 11
Projecto  Curricular Do Ji Vg 10 11Projecto  Curricular Do Ji Vg 10 11
Projecto Curricular Do Ji Vg 10 11
Ana Barroca
 
Digestivo morfo2009 externo
Digestivo morfo2009 externoDigestivo morfo2009 externo
Digestivo morfo2009 externo
Visualsac Best
 
ESTADISTICA DE LA NTIC
ESTADISTICA DE LA NTICESTADISTICA DE LA NTIC
ESTADISTICA DE LA NTIC
MAYRA PAZMIÑO
 
We Love コンビニ
We Love コンビニWe Love コンビニ
We Love コンビニ
bluedoragon1
 
Documento de subredes_traducido_al_español
Documento de subredes_traducido_al_españolDocumento de subredes_traducido_al_español
Documento de subredes_traducido_al_español
Josue Ramon
 
Antrag-auf-Beibehaltung
Antrag-auf-BeibehaltungAntrag-auf-Beibehaltung
Antrag-auf-Beibehaltung
Alex Walke
 

Andere mochten auch (19)

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

Ähnlich wie @wcmtl

Vinay Paudel: Optimizing and Speeding up a WordPress site
Vinay Paudel: Optimizing and Speeding up a WordPress siteVinay Paudel: Optimizing and Speeding up a WordPress site
Vinay Paudel: Optimizing and Speeding up a WordPress site
wpnepal
 
Wordpress optimization
Wordpress optimizationWordpress optimization
Wordpress optimization
paudelvinay
 
Twig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHPTwig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHP
Fabien Potencier
 

Ähnlich wie @wcmtl (20)

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

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Kürzlich hochgeladen (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

@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

Hinweis der Redaktion

  1. \n
  2. How to pronounce my name :)\n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\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. required files, then talk about all the other optional templates\n
  18. The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\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. \n
  26. The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\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. \n
  36. The state of the Theme\n&amp;#x2026;\n&amp;#x2026;\n&amp;#x2026;\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. \n