SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Creare un tema personalizzato
            per wordpress
                   Daniele Balboni



1          WordCamp Bologna - 24 novembre 2012
Struttura standard di un tema


 ●   Style.css                            • Tags
 ●   Homepage                                   tag.php
        index.php
        home.php
                                          • Search Results
                                                search.php
 ●   Single Post
        single.php                       • 404
                                                404.php
 ●   Page
        page.php
 ●   Category
        category.php
        archive.php


 2                      WordCamp Bologna - 24 novembre 2012
3   WordCamp Bologna - 24 novembre 2012
Il foglio di stile – style.css

     Il tema deve contenere il file style.css con la seguente
         intestazione: I metadata sono fondamentali per
         l’installazione corretta del tema




               Ovviamente style.css può contenere
                anche gli stili per il vostro layout
 4                       WordCamp Bologna - 24 novembre 2012
Functions.php
●    E’ il primo file ad essere caricato e si comporta come un
     plugin.


●    Questo file solitamente è utilizzato per personalizzare Il
     tema: definizione delle widget area, caricamento di css e
     script, customizzazione di contenuti come excerpt e meta
     informazioni.


●    La logica del tema va inserita in questo file non nei template!


●    Se functions.php fa troppe cose meglio riorganizzare il
     codice con gli includes.


 5                   WordCamp Bologna - 24 novembre 2012
Setup del tema




 6               WordCamp Bologna - 24 novembre 2012
Contenuto dei templates
●    Index.php
     La home page dei contenuti. Di default carica gli ultimi post inseriti, è
        possibile usare anche una pagina statica come front page.
●    Page.php
     ●   Carica I contenuti definiti come ‘pages’
     ●   ?page_id=2
●    Archive.php
     Carica I post inseriti in una categoria/tassonomia.
         • Categorie
         • Tags
         • Autori
         • Date

●    Single.php
     Carica I contenuti di un singolo post




 7                       WordCamp Bologna - 24 novembre 2012
L’oggetto bloginfo
●       Mostra le informazioni associate al tuo blog, la maggior parte delle quali sono memorizzate nelle opzioni generali che si trovano nel
        Pannello di Amministrazione. Questo marcatore può essere usato dovunque, all'interno delle pagine di template: <?php bloginfo(‘url');
        ?>
●       name = Testpilot
●       description = Just another WordPress blog
●       admin_email = admin@example
●       url = http://example/home
●       wpurl = http://example/home/wp
●       stylesheet_directory = http://example/home/wp/wp-content/themes/child-theme
●       stylesheet_url = http://example/home/wp/wp-content/themes/child-theme/style.css
●       template_directory = http://example/home/wp/wp-content/themes/parent-theme
●       template_url = http://example/home/wp/wp-content/themes/parent-theme
●       rss2_url = http://example/home/feed
●       rss_url = http://example/home/feed/rss
●       pingback_url = http://example/home/wp/xmlrpc.php
●       rdf_url = http://example/home/feed/rdf
●       comments_rss2_url = http://example/home/comments/feed
●       charset = UTF-8
●       html_type = text/html
●       language = en-US
●       text_direction = ltr
●       version = 3.1

    8                                       WordCamp Bologna - 24 novembre 2012
Cosa non fare in un template
●       Costruire a mano le URL’s
         ●   <a href="'.get_bloginfo('url').'/category/'.$ctBX->category_nicename.‘”>  NO
         ●   get_category_link($id) o get_permalink($id) SI


●       Non verificare che esista la funzione desiderata
         ●   if(function_exists(‘plugin_function’)):
                 plugin_function();
              endif;


●       Non usare le funzioni di wp per sapere dove siamo
         ●   if(isset($_GET[‘s’]) || $_SERVER[‘REQUEST_URI’] == ‘/index.php’) NO
         ●   if(is_search() || is_home()) SI



●       Caricare JS o CSS dal template
         ●   ex. Caricando I js e/o I css direttamente dal template rischiamo di caricare lo
             stesso script più volte oppure rischiamo di creare conflitti.
●       Usiamo wp_enqueue_script e wp_enqueue_style in functions.php per caricare I js e I css
        utili per il nostro tema: http://codex.wordpress.org/Function_Reference/wp_enqueue_script
        http://codex.wordpress.org/Function_Reference/wp_enqueue_s



●       Rimuovere wp_head() o wp_footer()
         ●   Rimuovendo le chiamate alle funzioni wp_head() e wp_footer() rischiamo di non far
             caricare correttamente I plugins o di non eseguire le actions sull’header e/o sul
             footer

    9                          WordCamp Bologna - 24 novembre 2012
The Loop


Quando viene richiesta una pagina WP esegue una query sul


database in base al tipo di template richiesto (archive, single, page).
La query di default è accessibile dal Loop


         if ( have_posts() ) : while ( have_posts() ) : the_post();
             //call our different template tags to retrieve data
               (title, date, post_content)
         endwhile; else:
             //default if we have no posts in the loop
         endif;
Possiamo modificare la query eseguendo la funzione query_posts()


prima del loop.
            query_posts(‘orderby=title&order=ASC');
query_posts() accetta diversi parametri.


   http://codex.wordpress.org/Function_Reference/query_posts


    10                    WordCamp Bologna - 24 novembre 2012
Visualizzare I contenuti

●     I Template tags sono funzioni da eseguire all’interno del Loop
      per visualizzare i dati
      ●   the_title()
      ●   the_content()
      ●   the_permalink()
 Queste funzioni sono equivalenti alle precedenti ma restituiscono solo il valore (no echo)
      ●   get_title()
      ●   get_permalink()
●     $wp_query object (outside the loop or extra data)
      Utile per eseguire ulteriori query all’interno della pagina
●     $post object

      Tutti I dati del post sono memorizzati in questo oggetto
           –   $post->comment_count          , $post->post_modified, etc

      http://codex.wordpress.org/Function_Reference/WP_Query

 11                           WordCamp Bologna - 24 novembre 2012
Anatomia di una pagina




 12                 WordCamp Bologna - 24 novembre 2012
Eseguire più query

●     Qualche volta abbiamo la necessità di eseguire più query per
      pagina, ad esempio per visualizzare I post correlati.
      <?php $related_posts = new WP_Query(‘cat=3&showposts=5');
      while ($related_posts->have_posts()) : $related_posts->the_post(); ?>
      <div class=“related_post">
          <h2><?php the_title(); ?></h2>
          <?php the_excerpt(); ?>
          <a href="<?php the_permalink(); ?>”>Learn More</a>
      </div>
      <?php endwhile; wp_reset_query(); ?>


●     WP_Query accetta gli stessi parametri di query_posts()

      http://codex.wordpress.org/Function_Reference/query_posts.


●     Usiamo wp_reset_query() e wp_reset_postdata() per “ritornare” alla
      query di default



 13                         WordCamp Bologna - 24 novembre 2012
Gestire templates, css e scripts


a) get_stylesheet_directory()/get_stylesheet_directory_uri()
Utilizziamo queste funzioni quando vogliamo rendere i
nostri template modificabili e sovrascribili nel child theme
b) get_template_directory()/get_template_directory_uri()
Utilizziamo queste funzioni quando vogliamo rendere I
nostri template non modificabili nel child theme
c) Per includere e organizzare meglio il nostro tema ed
includere un template in un altro template usiamo
get_template_part() or locate_template()




 14                   WordCamp Bologna - 24 novembre 2012
Template personalizzati per contesto



get_template_part( $file, $slug )
Facilita il caricamento di template personalizzati in base al contesto
Si basa sulla gerarchia standard dei template:


Esempio

In single.php: get_header( 'single' ) => header-single.php
In page.php: get_template_part( 'loop', 'page' ) => loop-page.php



Possiamo personalizzare anche header, footer e sidebar in base al contesto:
get_header( $slug ), get_footer( $slug ), get_sidebar( $slug )


 15                      WordCamp Bologna - 24 novembre 2012
Utilizziamo i post format



get_template_part( $file, get_post_format() )
Possiamo personalizzare il contenuto in base al post-format scelto dall'utente. La
funzionalità post-format è disponibile da wp 3.1
get_post_format() ritorna null for “standard”


Se non è definito un template per il post-format scelto verrà caricato il file di default.


Esempio

get_template_part( 'entry', get_post_format() )
–entry-aside.php
–entry.php




 16                          WordCamp Bologna - 24 novembre 2012
Usiamo le actions per le funzioni

Tutte le funzioni devono essere richiamate da un action
Pro: possiamo cancellare la funzione con remove_action

Errato
Eseguire la funzione direttamente in functions.php




Corretto
Richiamare la funzione all'interno di un action




 17                     WordCamp Bologna - 24 novembre 2012
Ridefinire le funzioni in un child theme

In un child theme possiamo ridefinire una funzione presente nel parent
theme. Per farlo basta aggiungere un semplice controllo
if( !function_exists('function_to_override') ) nel parent theme.
Esempio:




 18                    WordCamp Bologna - 24 novembre 2012
Enqueueing Stylesheets and Scripts

Perchè usare wp_enqueue_style e wp_enqueue_script
●Per essere sicuri che le risorse siano caricate nell’ordine corretto
(dipendenze);
●Per maggiore compatibilità con le versioni future;

●Per evitare conflitti con altri plugin o con il core;

●Per evitare di caricare la stessa risorsa più volte;

●Per caricare le risorse solo quando servono.




    19                   WordCamp Bologna - 24 novembre 2012
Enqueueing Stylesheets and Scripts
Cerchiamo di usare sempre le versioni incluse degli script
es. jQuery and jQuery Plugins
! Sostituiamo gli script inclusi solo se è davvero utile, ad esempio per caricare jquery da
CDN, ma solo front-end.

Caricare gli script nel nostro tema
Hook: wp_enqueue_scripts
●


Usiamo il parametro $deps in wp_enqueue_script() per gestire correttamente le
●

dipendenze
Per sicurezza: if ( ! is_admin() )
●


Usiamo il parametro $ver per indicare il numero di versione da caricare
●




    20                      WordCamp Bologna - 24 novembre 2012
Enqueueing Stylesheets and Scripts
Caricare i css nel nostro tema
Hook: wp_enqueue_style
●


Usiamo il parametro $deps in wp_enqueue_style() per gestire correttamente le
●

dipendenze
Per sicurezza: if ( ! is_admin() )
●


Usiamo il parametro $ver per indicare il numero di versione da caricare
●




    21                   WordCamp Bologna - 24 novembre 2012
Link utili
Resources
●get_stylesheet_directory():
http://codex.wordpress.org/Function_Reference/get_stylesheet_directory
●get_template_directory():

http://codex.wordpress.org/Function_Reference/get_template_directory
●get_template_part(): http://codex.wordpress.org/Function_Reference/get_template_part

●WordPress Plugin API: http://codex.wordpress.org/Plugin_API

http://codex.wordpress.org/Plugin_API/Filter_Reference
http://codex.wordpress.org/Plugin_API/Action_Reference
●Template tags: https://codex.wordpress.org/Template_Tags




Script/Stylesheet Enqueueing
wp_enqueue_script(): http://codex.wordpress.org/Function_Reference/wp_enqueue_script
wp_enqueue_style(): http://codex.wordpress.org/Function_Reference/wp_enqueue_style


WordPress Coding Standards
●WordPress Coding Standards: http://codex.wordpress.org/WordPress_Coding_Standards
●Theme Review Guidelines: http://codex.wordpress.org/Theme_Review

●Theme Unit Tests: http://codex.wordpress.org/Theme_Unit_Test




    22                     WordCamp Bologna - 24 novembre 2012

Contenu connexe

Tendances

Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerMatteo Magni
 
Sviluppare Plugin per WordPress
Sviluppare Plugin per WordPress Sviluppare Plugin per WordPress
Sviluppare Plugin per WordPress Thomas Vitale
 
WordPress 101 – Freelance Day - 24 ottobre 2015
WordPress 101 – Freelance Day - 24 ottobre 2015WordPress 101 – Freelance Day - 24 ottobre 2015
WordPress 101 – Freelance Day - 24 ottobre 2015Toolbox Coworking
 
WPO: Ottimizzazione step-by-step del front-end di un e-commerce
WPO: Ottimizzazione step-by-step del front-end di un e-commerceWPO: Ottimizzazione step-by-step del front-end di un e-commerce
WPO: Ottimizzazione step-by-step del front-end di un e-commerceFrancesco Terenzani
 
[drupalday2017] - Drupal & Patternlab: un nuovo approccio al theming
[drupalday2017] - Drupal & Patternlab: un nuovo approccio al theming[drupalday2017] - Drupal & Patternlab: un nuovo approccio al theming
[drupalday2017] - Drupal & Patternlab: un nuovo approccio al themingDrupalDay
 
50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...
50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...
50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...Andrea Cardinali
 
Wordpress Template hierarchy
Wordpress Template hierarchyWordpress Template hierarchy
Wordpress Template hierarchyGloria Liuni
 
Come velocizzare un sito web | Corso SEO a Bologna
Come velocizzare un sito web | Corso SEO a BolognaCome velocizzare un sito web | Corso SEO a Bologna
Come velocizzare un sito web | Corso SEO a BolognaWeb2Lab Studio
 
Programmare con javascript
Programmare con javascriptProgrammare con javascript
Programmare con javascriptronchet
 

Tendances (10)

Web performance & Http2
Web performance & Http2Web performance & Http2
Web performance & Http2
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
 
Sviluppare Plugin per WordPress
Sviluppare Plugin per WordPress Sviluppare Plugin per WordPress
Sviluppare Plugin per WordPress
 
WordPress 101 – Freelance Day - 24 ottobre 2015
WordPress 101 – Freelance Day - 24 ottobre 2015WordPress 101 – Freelance Day - 24 ottobre 2015
WordPress 101 – Freelance Day - 24 ottobre 2015
 
WPO: Ottimizzazione step-by-step del front-end di un e-commerce
WPO: Ottimizzazione step-by-step del front-end di un e-commerceWPO: Ottimizzazione step-by-step del front-end di un e-commerce
WPO: Ottimizzazione step-by-step del front-end di un e-commerce
 
[drupalday2017] - Drupal & Patternlab: un nuovo approccio al theming
[drupalday2017] - Drupal & Patternlab: un nuovo approccio al theming[drupalday2017] - Drupal & Patternlab: un nuovo approccio al theming
[drupalday2017] - Drupal & Patternlab: un nuovo approccio al theming
 
50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...
50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...
50 tips su Web  Performance Optimization per siti ad alto traffico @ WpCamp B...
 
Wordpress Template hierarchy
Wordpress Template hierarchyWordpress Template hierarchy
Wordpress Template hierarchy
 
Come velocizzare un sito web | Corso SEO a Bologna
Come velocizzare un sito web | Corso SEO a BolognaCome velocizzare un sito web | Corso SEO a Bologna
Come velocizzare un sito web | Corso SEO a Bologna
 
Programmare con javascript
Programmare con javascriptProgrammare con javascript
Programmare con javascript
 

En vedette

Digital Publishing overview - Michela Di Stefano
Digital Publishing overview - Michela Di StefanoDigital Publishing overview - Michela Di Stefano
Digital Publishing overview - Michela Di StefanoGirl Geek Dinners Milano
 
Digital Transformation & Big Data - @elecipo
Digital Transformation & Big Data - @elecipoDigital Transformation & Big Data - @elecipo
Digital Transformation & Big Data - @elecipoggdmarche
 
Proforma - corso universitario di comunicazione politica allo IED: tutte le s...
Proforma - corso universitario di comunicazione politica allo IED: tutte le s...Proforma - corso universitario di comunicazione politica allo IED: tutte le s...
Proforma - corso universitario di comunicazione politica allo IED: tutte le s...Proforma
 
Breaking up (your code) is hard to do
Breaking up (your code) is hard to doBreaking up (your code) is hard to do
Breaking up (your code) is hard to doDan Beil
 
Website Security - It Begins With Good Posture
Website Security - It Begins With Good PostureWebsite Security - It Begins With Good Posture
Website Security - It Begins With Good PostureTony Perez
 
WCCHS: Responsive Design with WordPress
WCCHS: Responsive Design with WordPressWCCHS: Responsive Design with WordPress
WCCHS: Responsive Design with WordPressJoe Casabona
 
Money Making Blogs
Money Making BlogsMoney Making Blogs
Money Making BlogsChris Lema
 
WordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressWordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressmtoppa
 
WordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChi
WordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChiWordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChi
WordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChiShanta Nathwani
 
Testing Made Easy
Testing Made EasyTesting Made Easy
Testing Made EasyMicah Wood
 
Zazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp MilwaukeeZazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp MilwaukeeRachel Baker
 
Developing for Success -or- Any Fool Can Do This
Developing for Success -or- Any Fool Can Do ThisDeveloping for Success -or- Any Fool Can Do This
Developing for Success -or- Any Fool Can Do ThisBrian Richards
 
Rapid application development for WordPress using AWF
Rapid application development for WordPress using AWFRapid application development for WordPress using AWF
Rapid application development for WordPress using AWFTim Plummer
 
Progressively Enhancing WordPress Themes
Progressively Enhancing WordPress ThemesProgressively Enhancing WordPress Themes
Progressively Enhancing WordPress ThemesDigitally
 
Por um wordpress mais seguro
Por um wordpress mais seguroPor um wordpress mais seguro
Por um wordpress mais seguroFlávio Silveira
 

En vedette (20)

Anobii, perché - Edoardo Brugnatelli
Anobii, perché - Edoardo BrugnatelliAnobii, perché - Edoardo Brugnatelli
Anobii, perché - Edoardo Brugnatelli
 
Digital Publishing overview - Michela Di Stefano
Digital Publishing overview - Michela Di StefanoDigital Publishing overview - Michela Di Stefano
Digital Publishing overview - Michela Di Stefano
 
Tipografia Digitale - Marta Bernstein
Tipografia Digitale - Marta BernsteinTipografia Digitale - Marta Bernstein
Tipografia Digitale - Marta Bernstein
 
Editori Digitali - Grazia Dell'Oro
Editori Digitali - Grazia Dell'OroEditori Digitali - Grazia Dell'Oro
Editori Digitali - Grazia Dell'Oro
 
Digital Transformation & Big Data - @elecipo
Digital Transformation & Big Data - @elecipoDigital Transformation & Big Data - @elecipo
Digital Transformation & Big Data - @elecipo
 
Proforma - corso universitario di comunicazione politica allo IED: tutte le s...
Proforma - corso universitario di comunicazione politica allo IED: tutte le s...Proforma - corso universitario di comunicazione politica allo IED: tutte le s...
Proforma - corso universitario di comunicazione politica allo IED: tutte le s...
 
Breaking up (your code) is hard to do
Breaking up (your code) is hard to doBreaking up (your code) is hard to do
Breaking up (your code) is hard to do
 
Website Security - It Begins With Good Posture
Website Security - It Begins With Good PostureWebsite Security - It Begins With Good Posture
Website Security - It Begins With Good Posture
 
WCCHS: Responsive Design with WordPress
WCCHS: Responsive Design with WordPressWCCHS: Responsive Design with WordPress
WCCHS: Responsive Design with WordPress
 
Money Making Blogs
Money Making BlogsMoney Making Blogs
Money Making Blogs
 
WordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressWordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPress
 
WordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChi
WordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChiWordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChi
WordPress 101 - Foundation Friday at WordCamp Chicago 2014 #WCChi
 
Testing Made Easy
Testing Made EasyTesting Made Easy
Testing Made Easy
 
Zazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp MilwaukeeZazzy WordPress Navigation WordCamp Milwaukee
Zazzy WordPress Navigation WordCamp Milwaukee
 
Developing for Success -or- Any Fool Can Do This
Developing for Success -or- Any Fool Can Do ThisDeveloping for Success -or- Any Fool Can Do This
Developing for Success -or- Any Fool Can Do This
 
Rapid application development for WordPress using AWF
Rapid application development for WordPress using AWFRapid application development for WordPress using AWF
Rapid application development for WordPress using AWF
 
Progressively Enhancing WordPress Themes
Progressively Enhancing WordPress ThemesProgressively Enhancing WordPress Themes
Progressively Enhancing WordPress Themes
 
The Best SEO Plugin for WordPress
The Best SEO Plugin for WordPressThe Best SEO Plugin for WordPress
The Best SEO Plugin for WordPress
 
Por um wordpress mais seguro
Por um wordpress mais seguroPor um wordpress mais seguro
Por um wordpress mais seguro
 
Caching 101 - WordCamp OC
Caching 101 - WordCamp OCCaching 101 - WordCamp OC
Caching 101 - WordCamp OC
 

Similaire à Creare un tema personalizzato per wordpress

Drupal 7 : theming avanzato
Drupal 7 : theming avanzatoDrupal 7 : theming avanzato
Drupal 7 : theming avanzatoTwinbit
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsKnowCamp
 
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...DrupalDay
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzionesparkfabrik
 
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...
Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...Vincenzo Di Biaggio
 
Child theme e template hierarchy for beginners
Child theme e template hierarchy for beginnersChild theme e template hierarchy for beginners
Child theme e template hierarchy for beginnersGloria Liuni
 
La Gerarchia dei Temi WordPress
La Gerarchia dei Temi WordPressLa Gerarchia dei Temi WordPress
La Gerarchia dei Temi WordPressMarco De Sangro
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscenceAndrea Gottardi
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Marco Chiesi
 
Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010
Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010
Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010Domenico Monaco
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANODrupalDay
 
DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)Alessandro Giorgetti
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value compositionOpen Makers Italy
 
Corso Pratico di WordPress
Corso Pratico di WordPressCorso Pratico di WordPress
Corso Pratico di WordPressNicola Strumia
 
Modificare i temi di WordPress
Modificare i temi di WordPressModificare i temi di WordPress
Modificare i temi di WordPressMarco Chizzali
 
Drupal Lessons by nois3lab
Drupal Lessons by nois3labDrupal Lessons by nois3lab
Drupal Lessons by nois3labnois3lab
 
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DrupalDay
 

Similaire à Creare un tema personalizzato per wordpress (20)

Drupal 7 : theming avanzato
Drupal 7 : theming avanzatoDrupal 7 : theming avanzato
Drupal 7 : theming avanzato
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more things
 
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
 
Drupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzioneDrupal 8 - dal download del core alla pubblicazione in produzione
Drupal 8 - dal download del core alla pubblicazione in produzione
 
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...
Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in prod...
Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in prod...
 
Child theme e template hierarchy for beginners
Child theme e template hierarchy for beginnersChild theme e template hierarchy for beginners
Child theme e template hierarchy for beginners
 
La Gerarchia dei Temi WordPress
La Gerarchia dei Temi WordPressLa Gerarchia dei Temi WordPress
La Gerarchia dei Temi WordPress
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscence
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010
Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010
Slide sessione Drupal Theming & CSS Framework – Drupal Camp Torino 2010
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 
Sviluppare moduli per il client web
Sviluppare moduli per il client webSviluppare moduli per il client web
Sviluppare moduli per il client web
 
DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)
 
Laravel Framework PHP
Laravel Framework PHPLaravel Framework PHP
Laravel Framework PHP
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value composition
 
Corso Pratico di WordPress
Corso Pratico di WordPressCorso Pratico di WordPress
Corso Pratico di WordPress
 
Modificare i temi di WordPress
Modificare i temi di WordPressModificare i temi di WordPress
Modificare i temi di WordPress
 
Drupal Lessons by nois3lab
Drupal Lessons by nois3labDrupal Lessons by nois3lab
Drupal Lessons by nois3lab
 
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8
 
Seo con drupal
Seo con drupalSeo con drupal
Seo con drupal
 

Plus de GGDBologna

Presentazione ggd bologna
Presentazione ggd bolognaPresentazione ggd bologna
Presentazione ggd bolognaGGDBologna
 
L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...
L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...
L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...GGDBologna
 
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV GGDBologna
 
Quanto è sicuro il tuo wordpress?
Quanto è sicuro il tuo wordpress? Quanto è sicuro il tuo wordpress?
Quanto è sicuro il tuo wordpress? GGDBologna
 
L’uso di WordPress nella comunicazione corporate di Telecom Italia
L’uso di WordPress nella comunicazione corporate di Telecom Italia L’uso di WordPress nella comunicazione corporate di Telecom Italia
L’uso di WordPress nella comunicazione corporate di Telecom Italia GGDBologna
 
Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti
Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti
Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti GGDBologna
 
Realizzare una intranet aziendale con wordpress
Realizzare una intranet aziendale con wordpressRealizzare una intranet aziendale con wordpress
Realizzare una intranet aziendale con wordpressGGDBologna
 
Word Press Starter Kit: Widget & Plugin
Word Press Starter Kit: Widget  & PluginWord Press Starter Kit: Widget  & Plugin
Word Press Starter Kit: Widget & PluginGGDBologna
 
GeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPressGeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPressGGDBologna
 
Introducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystemIntroducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystemGGDBologna
 
Mba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischerMba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischerGGDBologna
 
Mba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischerMba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischerGGDBologna
 
Il mondo di twitter
Il mondo di twitterIl mondo di twitter
Il mondo di twitterGGDBologna
 
West women in stem
West women in stem West women in stem
West women in stem GGDBologna
 
GGDBologna: Presentazione
GGDBologna: PresentazioneGGDBologna: Presentazione
GGDBologna: PresentazioneGGDBologna
 
GGDBologna11: Flavia Marzano
GGDBologna11: Flavia MarzanoGGDBologna11: Flavia Marzano
GGDBologna11: Flavia MarzanoGGDBologna
 
GGDBologna11: Antonella Napolitano
GGDBologna11: Antonella NapolitanoGGDBologna11: Antonella Napolitano
GGDBologna11: Antonella NapolitanoGGDBologna
 
Organizzare un evento on-line e aver successo
Organizzare un evento on-line e aver successoOrganizzare un evento on-line e aver successo
Organizzare un evento on-line e aver successoGGDBologna
 
Francesca Minonne: GRAN TORINO 2.0
Francesca Minonne: GRAN TORINO 2.0Francesca Minonne: GRAN TORINO 2.0
Francesca Minonne: GRAN TORINO 2.0GGDBologna
 
Stefania Boleso e Monica Massola Riflessioni in corso: #donnexdonne, Rete e...
Stefania Boleso e Monica   Massola Riflessioni in corso: #donnexdonne, Rete e...Stefania Boleso e Monica   Massola Riflessioni in corso: #donnexdonne, Rete e...
Stefania Boleso e Monica Massola Riflessioni in corso: #donnexdonne, Rete e...GGDBologna
 

Plus de GGDBologna (20)

Presentazione ggd bologna
Presentazione ggd bolognaPresentazione ggd bologna
Presentazione ggd bologna
 
L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...
L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...
L’ascesa della geolocalizzazione. Perché mapperemo sempre di più e come lo fa...
 
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
 
Quanto è sicuro il tuo wordpress?
Quanto è sicuro il tuo wordpress? Quanto è sicuro il tuo wordpress?
Quanto è sicuro il tuo wordpress?
 
L’uso di WordPress nella comunicazione corporate di Telecom Italia
L’uso di WordPress nella comunicazione corporate di Telecom Italia L’uso di WordPress nella comunicazione corporate di Telecom Italia
L’uso di WordPress nella comunicazione corporate di Telecom Italia
 
Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti
Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti
Un blog per la scuola Dozza: il progetto Dozzilla e i suoi protagonisti
 
Realizzare una intranet aziendale con wordpress
Realizzare una intranet aziendale con wordpressRealizzare una intranet aziendale con wordpress
Realizzare una intranet aziendale con wordpress
 
Word Press Starter Kit: Widget & Plugin
Word Press Starter Kit: Widget  & PluginWord Press Starter Kit: Widget  & Plugin
Word Press Starter Kit: Widget & Plugin
 
GeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPressGeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPress
 
Introducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystemIntroducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystem
 
Mba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischerMba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischer
 
Mba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischerMba class 2012 2013-i.fischer
Mba class 2012 2013-i.fischer
 
Il mondo di twitter
Il mondo di twitterIl mondo di twitter
Il mondo di twitter
 
West women in stem
West women in stem West women in stem
West women in stem
 
GGDBologna: Presentazione
GGDBologna: PresentazioneGGDBologna: Presentazione
GGDBologna: Presentazione
 
GGDBologna11: Flavia Marzano
GGDBologna11: Flavia MarzanoGGDBologna11: Flavia Marzano
GGDBologna11: Flavia Marzano
 
GGDBologna11: Antonella Napolitano
GGDBologna11: Antonella NapolitanoGGDBologna11: Antonella Napolitano
GGDBologna11: Antonella Napolitano
 
Organizzare un evento on-line e aver successo
Organizzare un evento on-line e aver successoOrganizzare un evento on-line e aver successo
Organizzare un evento on-line e aver successo
 
Francesca Minonne: GRAN TORINO 2.0
Francesca Minonne: GRAN TORINO 2.0Francesca Minonne: GRAN TORINO 2.0
Francesca Minonne: GRAN TORINO 2.0
 
Stefania Boleso e Monica Massola Riflessioni in corso: #donnexdonne, Rete e...
Stefania Boleso e Monica   Massola Riflessioni in corso: #donnexdonne, Rete e...Stefania Boleso e Monica   Massola Riflessioni in corso: #donnexdonne, Rete e...
Stefania Boleso e Monica Massola Riflessioni in corso: #donnexdonne, Rete e...
 

Creare un tema personalizzato per wordpress

  • 1. Creare un tema personalizzato per wordpress Daniele Balboni 1 WordCamp Bologna - 24 novembre 2012
  • 2. Struttura standard di un tema ● Style.css • Tags ● Homepage  tag.php  index.php  home.php • Search Results  search.php ● Single Post  single.php • 404  404.php ● Page  page.php ● Category  category.php  archive.php 2 WordCamp Bologna - 24 novembre 2012
  • 3. 3 WordCamp Bologna - 24 novembre 2012
  • 4. Il foglio di stile – style.css Il tema deve contenere il file style.css con la seguente intestazione: I metadata sono fondamentali per l’installazione corretta del tema Ovviamente style.css può contenere anche gli stili per il vostro layout 4 WordCamp Bologna - 24 novembre 2012
  • 5. Functions.php ● E’ il primo file ad essere caricato e si comporta come un plugin. ● Questo file solitamente è utilizzato per personalizzare Il tema: definizione delle widget area, caricamento di css e script, customizzazione di contenuti come excerpt e meta informazioni. ● La logica del tema va inserita in questo file non nei template! ● Se functions.php fa troppe cose meglio riorganizzare il codice con gli includes. 5 WordCamp Bologna - 24 novembre 2012
  • 6. Setup del tema 6 WordCamp Bologna - 24 novembre 2012
  • 7. Contenuto dei templates ● Index.php La home page dei contenuti. Di default carica gli ultimi post inseriti, è possibile usare anche una pagina statica come front page. ● Page.php ● Carica I contenuti definiti come ‘pages’ ● ?page_id=2 ● Archive.php Carica I post inseriti in una categoria/tassonomia. • Categorie • Tags • Autori • Date ● Single.php Carica I contenuti di un singolo post 7 WordCamp Bologna - 24 novembre 2012
  • 8. L’oggetto bloginfo ● Mostra le informazioni associate al tuo blog, la maggior parte delle quali sono memorizzate nelle opzioni generali che si trovano nel Pannello di Amministrazione. Questo marcatore può essere usato dovunque, all'interno delle pagine di template: <?php bloginfo(‘url'); ?> ● name = Testpilot ● description = Just another WordPress blog ● admin_email = admin@example ● url = http://example/home ● wpurl = http://example/home/wp ● stylesheet_directory = http://example/home/wp/wp-content/themes/child-theme ● stylesheet_url = http://example/home/wp/wp-content/themes/child-theme/style.css ● template_directory = http://example/home/wp/wp-content/themes/parent-theme ● template_url = http://example/home/wp/wp-content/themes/parent-theme ● rss2_url = http://example/home/feed ● rss_url = http://example/home/feed/rss ● pingback_url = http://example/home/wp/xmlrpc.php ● rdf_url = http://example/home/feed/rdf ● comments_rss2_url = http://example/home/comments/feed ● charset = UTF-8 ● html_type = text/html ● language = en-US ● text_direction = ltr ● version = 3.1 8 WordCamp Bologna - 24 novembre 2012
  • 9. Cosa non fare in un template ● Costruire a mano le URL’s ● <a href="'.get_bloginfo('url').'/category/'.$ctBX->category_nicename.‘”>  NO ● get_category_link($id) o get_permalink($id) SI ● Non verificare che esista la funzione desiderata ● if(function_exists(‘plugin_function’)): plugin_function(); endif; ● Non usare le funzioni di wp per sapere dove siamo ● if(isset($_GET[‘s’]) || $_SERVER[‘REQUEST_URI’] == ‘/index.php’) NO ● if(is_search() || is_home()) SI ● Caricare JS o CSS dal template ● ex. Caricando I js e/o I css direttamente dal template rischiamo di caricare lo stesso script più volte oppure rischiamo di creare conflitti. ● Usiamo wp_enqueue_script e wp_enqueue_style in functions.php per caricare I js e I css utili per il nostro tema: http://codex.wordpress.org/Function_Reference/wp_enqueue_script http://codex.wordpress.org/Function_Reference/wp_enqueue_s ● Rimuovere wp_head() o wp_footer() ● Rimuovendo le chiamate alle funzioni wp_head() e wp_footer() rischiamo di non far caricare correttamente I plugins o di non eseguire le actions sull’header e/o sul footer 9 WordCamp Bologna - 24 novembre 2012
  • 10. The Loop Quando viene richiesta una pagina WP esegue una query sul  database in base al tipo di template richiesto (archive, single, page). La query di default è accessibile dal Loop  if ( have_posts() ) : while ( have_posts() ) : the_post(); //call our different template tags to retrieve data (title, date, post_content) endwhile; else: //default if we have no posts in the loop endif; Possiamo modificare la query eseguendo la funzione query_posts()  prima del loop.  query_posts(‘orderby=title&order=ASC'); query_posts() accetta diversi parametri.  http://codex.wordpress.org/Function_Reference/query_posts 10 WordCamp Bologna - 24 novembre 2012
  • 11. Visualizzare I contenuti ● I Template tags sono funzioni da eseguire all’interno del Loop per visualizzare i dati ● the_title() ● the_content() ● the_permalink() Queste funzioni sono equivalenti alle precedenti ma restituiscono solo il valore (no echo) ● get_title() ● get_permalink() ● $wp_query object (outside the loop or extra data) Utile per eseguire ulteriori query all’interno della pagina ● $post object Tutti I dati del post sono memorizzati in questo oggetto – $post->comment_count , $post->post_modified, etc http://codex.wordpress.org/Function_Reference/WP_Query 11 WordCamp Bologna - 24 novembre 2012
  • 12. Anatomia di una pagina 12 WordCamp Bologna - 24 novembre 2012
  • 13. Eseguire più query ● Qualche volta abbiamo la necessità di eseguire più query per pagina, ad esempio per visualizzare I post correlati. <?php $related_posts = new WP_Query(‘cat=3&showposts=5'); while ($related_posts->have_posts()) : $related_posts->the_post(); ?> <div class=“related_post"> <h2><?php the_title(); ?></h2> <?php the_excerpt(); ?> <a href="<?php the_permalink(); ?>”>Learn More</a> </div> <?php endwhile; wp_reset_query(); ?> ● WP_Query accetta gli stessi parametri di query_posts() http://codex.wordpress.org/Function_Reference/query_posts. ● Usiamo wp_reset_query() e wp_reset_postdata() per “ritornare” alla query di default 13 WordCamp Bologna - 24 novembre 2012
  • 14. Gestire templates, css e scripts a) get_stylesheet_directory()/get_stylesheet_directory_uri() Utilizziamo queste funzioni quando vogliamo rendere i nostri template modificabili e sovrascribili nel child theme b) get_template_directory()/get_template_directory_uri() Utilizziamo queste funzioni quando vogliamo rendere I nostri template non modificabili nel child theme c) Per includere e organizzare meglio il nostro tema ed includere un template in un altro template usiamo get_template_part() or locate_template() 14 WordCamp Bologna - 24 novembre 2012
  • 15. Template personalizzati per contesto get_template_part( $file, $slug ) Facilita il caricamento di template personalizzati in base al contesto Si basa sulla gerarchia standard dei template: Esempio In single.php: get_header( 'single' ) => header-single.php In page.php: get_template_part( 'loop', 'page' ) => loop-page.php Possiamo personalizzare anche header, footer e sidebar in base al contesto: get_header( $slug ), get_footer( $slug ), get_sidebar( $slug ) 15 WordCamp Bologna - 24 novembre 2012
  • 16. Utilizziamo i post format get_template_part( $file, get_post_format() ) Possiamo personalizzare il contenuto in base al post-format scelto dall'utente. La funzionalità post-format è disponibile da wp 3.1 get_post_format() ritorna null for “standard” Se non è definito un template per il post-format scelto verrà caricato il file di default. Esempio get_template_part( 'entry', get_post_format() ) –entry-aside.php –entry.php 16 WordCamp Bologna - 24 novembre 2012
  • 17. Usiamo le actions per le funzioni Tutte le funzioni devono essere richiamate da un action Pro: possiamo cancellare la funzione con remove_action Errato Eseguire la funzione direttamente in functions.php Corretto Richiamare la funzione all'interno di un action 17 WordCamp Bologna - 24 novembre 2012
  • 18. Ridefinire le funzioni in un child theme In un child theme possiamo ridefinire una funzione presente nel parent theme. Per farlo basta aggiungere un semplice controllo if( !function_exists('function_to_override') ) nel parent theme. Esempio: 18 WordCamp Bologna - 24 novembre 2012
  • 19. Enqueueing Stylesheets and Scripts Perchè usare wp_enqueue_style e wp_enqueue_script ●Per essere sicuri che le risorse siano caricate nell’ordine corretto (dipendenze); ●Per maggiore compatibilità con le versioni future; ●Per evitare conflitti con altri plugin o con il core; ●Per evitare di caricare la stessa risorsa più volte; ●Per caricare le risorse solo quando servono. 19 WordCamp Bologna - 24 novembre 2012
  • 20. Enqueueing Stylesheets and Scripts Cerchiamo di usare sempre le versioni incluse degli script es. jQuery and jQuery Plugins ! Sostituiamo gli script inclusi solo se è davvero utile, ad esempio per caricare jquery da CDN, ma solo front-end. Caricare gli script nel nostro tema Hook: wp_enqueue_scripts ● Usiamo il parametro $deps in wp_enqueue_script() per gestire correttamente le ● dipendenze Per sicurezza: if ( ! is_admin() ) ● Usiamo il parametro $ver per indicare il numero di versione da caricare ● 20 WordCamp Bologna - 24 novembre 2012
  • 21. Enqueueing Stylesheets and Scripts Caricare i css nel nostro tema Hook: wp_enqueue_style ● Usiamo il parametro $deps in wp_enqueue_style() per gestire correttamente le ● dipendenze Per sicurezza: if ( ! is_admin() ) ● Usiamo il parametro $ver per indicare il numero di versione da caricare ● 21 WordCamp Bologna - 24 novembre 2012
  • 22. Link utili Resources ●get_stylesheet_directory(): http://codex.wordpress.org/Function_Reference/get_stylesheet_directory ●get_template_directory(): http://codex.wordpress.org/Function_Reference/get_template_directory ●get_template_part(): http://codex.wordpress.org/Function_Reference/get_template_part ●WordPress Plugin API: http://codex.wordpress.org/Plugin_API http://codex.wordpress.org/Plugin_API/Filter_Reference http://codex.wordpress.org/Plugin_API/Action_Reference ●Template tags: https://codex.wordpress.org/Template_Tags Script/Stylesheet Enqueueing wp_enqueue_script(): http://codex.wordpress.org/Function_Reference/wp_enqueue_script wp_enqueue_style(): http://codex.wordpress.org/Function_Reference/wp_enqueue_style WordPress Coding Standards ●WordPress Coding Standards: http://codex.wordpress.org/WordPress_Coding_Standards ●Theme Review Guidelines: http://codex.wordpress.org/Theme_Review ●Theme Unit Tests: http://codex.wordpress.org/Theme_Unit_Test 22 WordCamp Bologna - 24 novembre 2012