SlideShare a Scribd company logo
1 of 67
Download to read offline
sabato 22 maggio 2010
Wordpress
                            Pillole di sviluppo tips & tricks




                           http://www.saidmade.com
                            WordCamp - Milano 22 Maggio 2010

                        Giovambattista Fazioli - CTO Saidmade Srl

sabato 22 maggio 2010
WordPress
                            Pillole di sviluppo tips & tricks




                            http://www.undolog.com
                            WordCamp - Milano 22 Maggio 2010

                        Giovambattista Fazioli - CTO Saidmade Srl

sabato 22 maggio 2010
sabato 22 maggio 2010
•come               strutturare un plugin: un
        possibile scheletro




sabato 22 maggio 2010
•come               strutturare un plugin: un
        possibile scheletro
    •ottimizzazione




sabato 22 maggio 2010
•come               strutturare un plugin: un
        possibile scheletro
    •ottimizzazione
    •tips & tricks




sabato 22 maggio 2010
come wordpress
               riconosce un plugin


sabato 22 maggio 2010
esegue una dir() nella cartella
                       /plugins ed apre
                    - tramite un fopen() -
                  "tutti" i file alla ricerca
                      dell'header comment
                un commento formattato in modo
             particolare che permette a Wordpress
                   di riconoscere un plugin




sabato 22 maggio 2010
se inseriamo nella cartella /plugins
                  un file mioplugin.php così
                         configurato:



          <?php
          // genero errore
          for()
          a = 4/0;
          ?>




sabato 22 maggio 2010
se inseriamo nella cartella /plugins
                  un file mioplugin.php così
                         configurato:



          <?php
          // genero errore
          for()
          a = 4/0;
          ?>




                        non accade nulla
sabato 22 maggio 2010
se inseriamo l’header comment

          <?php
          /*
          Plugin Name: WP MioPlugin
          Plugin URI: http://www.saidmade.com/
          Description: WP MioPlugin
          Version: 1.0.0
          Author: Giovambattista Fazioli
          Author URI: http://www.saidmade.com
          Disclaimer: Use at your own risk. No warranty expressed or implied is
          provided.
          */

          // genero errore
          for()
          a = 4/0;
          ?>




sabato 22 maggio 2010
se inseriamo l’header comment

          <?php
          /*
          Plugin Name: WP MioPlugin
          Plugin URI: http://www.saidmade.com/
          Description: WP MioPlugin
          Version: 1.0.0
          Author: Giovambattista Fazioli
          Author URI: http://www.saidmade.com
          Disclaimer: Use at your own risk. No warranty expressed or implied is
          provided.
          */

          // genero errore
          for()
          a = 4/0;
          ?>




                        non accade nulla
sabato 22 maggio 2010
sabato 22 maggio 2010
sabato 22 maggio 2010
se attiviamo il plugin...




sabato 22 maggio 2010
<?php
          /*
          Plugin Name: WP MioPlugin
          Plugin URI: http://www.saidmade.com/
          Description: WP MioPlugin
          Version: 1.0.0
          Author: Giovambattista Fazioli
          Author URI: http://www.saidmade.com
          Disclaimer: Use at your own risk. No warranty expressed or implied is
          provided.
          */

          echo “Plugin Attivo”;
          ?>




          la scritta “Plugin Attivo” verrà visualizzata sia lato
                        Frontend che lato Backend



sabato 22 maggio 2010
sabato 22 maggio 2010
sabato 22 maggio 2010
• Wordpress         esegue sempre una dir() in /plugins




sabato 22 maggio 2010
• Wordpress              esegue sempre una dir() in /plugins

    • apre              i file - con una fopen() - alla ricerca dell’header




sabato 22 maggio 2010
• Wordpress              esegue sempre una dir() in /plugins

    • apre              i file - con una fopen() - alla ricerca dell’header

    • esegue              il codice solo quando il plugin è attivo




sabato 22 maggio 2010
distinguere il
                        frontend dal
                          backend


sabato 22 maggio 2010
sabato 22 maggio 2010
sabato 22 maggio 2010
sabato 22 maggio 2010
if( is_admin() ) {
              require_once( 'backend.php' );
          } else {
              require_once( 'frontend.php' );
          }




sabato 22 maggio 2010
if( is_admin() ) {
              require_once( 'backend.php' );
          } else {
              require_once( 'frontend.php' );
          }




                          Questa è di per sé già una forma di
                                     ottimizzazione
                        in quanto abbiamo separato i “possibili”
            ambienti su cui potrà operare il nostro plugin




sabato 22 maggio 2010
plugin che operano solo lato

                                       backend


           if( is_admin() ) {
               require_once( 'backend.php' );
           } else {
               // require_once( 'frontend.php' );
           }




sabato 22 maggio 2010
plugin che operano solo lato

                                      frontend


           if( is_admin() ) {
               // require_once( 'backend.php' );
           } else {
               require_once( 'frontend.php' );
           }




sabato 22 maggio 2010
classi



sabato 22 maggio 2010
sabato 22 maggio 2010
• la        classe funziona da NameSpace




sabato 22 maggio 2010
• la        classe funziona da NameSpace

    • protezione        contro la duplicazione di funzioni




sabato 22 maggio 2010
• la        classe funziona da NameSpace

    • protezione        contro la duplicazione di funzioni

        • protezione     verso altri plugin




sabato 22 maggio 2010
• la        classe funziona da NameSpace

    • protezione          contro la duplicazione di funzioni

        • protezione       verso altri plugin

    • sviluppo          del plugin secondo una filosofia Object Oriented




sabato 22 maggio 2010
• la        classe funziona da NameSpace

    • protezione          contro la duplicazione di funzioni

        • protezione       verso altri plugin

    • sviluppo          del plugin secondo una filosofia Object Oriented

        • ereditarietà       tra classi




sabato 22 maggio 2010
• la        classe funziona da NameSpace

    • protezione           contro la duplicazione di funzioni

        • protezione        verso altri plugin

    • sviluppo           del plugin secondo una filosofia Object Oriented

        • ereditarietà        tra classi

    • miglior           riutilizzo del codice




sabato 22 maggio 2010
• la        classe funziona da NameSpace

    • protezione           contro la duplicazione di funzioni

        • protezione        verso altri plugin

    • sviluppo           del plugin secondo una filosofia Object Oriented

        • ereditarietà        tra classi

    • miglior           riutilizzo del codice

    • fa        figo...




sabato 22 maggio 2010
sabato 22 maggio 2010
// load the core class
           require_once( 'wp-mioplugin_class.php');

           // check admin
           if( is_admin() ) {
               // load admin class
               require_once( 'wp-mioplugin_backend.php' );
               // create object
               $wp_mioplugin_backend = new WPMIOPLUGIN_BACKEND();
           } else {
               // load client front-end class
               require_once( 'wp-mioplugin_frontend.php');
               // create object
               $wp_mioplugin_frontend = new WPMIOPLUGIN_FRONTEND();
           }




sabato 22 maggio 2010
class WPMIOPLUGIN_CLASS {
              var $version     = “1.0.0”;
              var $plugin_name = “WP Mio Plugin”;
              var $plugin_slug = “wp-mio-plugin”;
              ...
          }




          class WPMIOPLUGIN_BACKEND extends WPMIOPLUGIN_CLASS {
              var $onlyBackend = “solo per backend”;

                  function WPMIOPLUGIN_BACKEND() {
                       echo $this->version;
                  }
          }




sabato 22 maggio 2010
class WPMIOPLUGIN_CLASS {
              var $version     = “1.0.0”;
              var $plugin_name = “WP Mio Plugin”;
              var $plugin_slug = “wp-mio-plugin”;
              ...
          }




          class WPMIOPLUGIN_FRONTEND extends WPMIOPLUGIN_CLASS {
              var $onlyFrontend = “solo per frontend”;

                  function WPMIOPLUGIN_FRONTEND() {
                       echo $this->version;
                  }
          }




sabato 22 maggio 2010
ottimizzazioni



sabato 22 maggio 2010
sabato 22 maggio 2010
• caricare          solo il codice PHP che ci serve in base al

        contesto in cui operiamo: Backend, Frontend, Pagine

        Template, etc...




sabato 22 maggio 2010
• caricare          solo il codice PHP che ci serve in base al

        contesto in cui operiamo: Backend, Frontend, Pagine

        Template, etc...

    • caricare          script e stili seguendo la regola di sopra




sabato 22 maggio 2010
• caricare          solo il codice PHP che ci serve in base al

        contesto in cui operiamo: Backend, Frontend, Pagine

        Template, etc...

    • caricare          script e stili seguendo la regola di sopra

        • utilizzare       le funzioni:




sabato 22 maggio 2010
• caricare          solo il codice PHP che ci serve in base al

        contesto in cui operiamo: Backend, Frontend, Pagine

        Template, etc...

    • caricare          script e stili seguendo la regola di sopra

        • utilizzare       le funzioni:

            • wp_register_style()     / wp_register_script()




sabato 22 maggio 2010
• caricare          solo il codice PHP che ci serve in base al

        contesto in cui operiamo: Backend, Frontend, Pagine

        Template, etc...

    • caricare          script e stili seguendo la regola di sopra

        • utilizzare       le funzioni:

            • wp_register_style()     / wp_register_script()

            • wp_enqueue_style()     / wp_enqueue_script()




sabato 22 maggio 2010
$this->url         = plugins_url("", __FILE__ );
          $this->plugin_name = "WP MioPlugin";
          $this->plugin_slug = "wp-mioplugin";

          add_action('admin_init', array( $this, 'plugin_init') );
          add_action('admin_menu', array( $this, 'plugin_setup') );

          function plugin_init() {
              wp_register_style('wp-mioplugin-style-css', $this->url . "/css/
          style.css");     
          }

          function plugin_setup() {
              $plugin_page = add_submenu_page("index.php", 
                 $this->plugin_name, $this->plugin_name, 10, 
                 $this->plugin_slug, array( $this, "menu"));
                  
              add_action( 'admin_print_scripts-'. $plugin_page, 
                 array( $this, 'plugin_admin_scripts') );
              
              add_action( 'admin_print_styles-'. $plugin_page, 
                array( $this, 'plugin_admin_styles') );
          }




sabato 22 maggio 2010
function plugin_admin_styles() {
              wp_enqueue_style('wp-mioplugin-style-css');
          }

          function plugin_admin_scripts() {
              wp_enqueue_script('wp-mioplugin-main-js' , 
                  $this->url . '/js/main.js' , array ( 'jquery' ) , '1.4' , true );
          }




sabato 22 maggio 2010
tips & tricks



sabato 22 maggio 2010
sabato 22 maggio 2010
sabato 22 maggio 2010
// istanza oggetto backend nel file principale
          $wp_mioplugin_admin->register_plugin_settings( __FILE__ );

          // ...

          function register_plugin_settings( $pluginfile ) {
              // percorso completo comprensivo di "cartella" del Plugin
              add_action( 'plugin_action_links_' . basename( dirname
          ( $pluginfile ) ) . '/' . basename( $pluginfile ), 
                  array( &$this, 'plugin_settings' ), 10, 1 );
          }

          function plugin_settings( $links ) {
              $settings_link = '<a href="index.php?page=WP MioPlugin">' . __
          ('Settings') . '</a>';
              // Prepend one or more elements to the beginning of an array
              array_unshift( $links, $settings_link );
              return $links;
          }




sabato 22 maggio 2010
sabato 22 maggio 2010
sabato 22 maggio 2010
// istanza oggetto backend nel file principale
          $wp_mioplugin_admin->register_plugin_settings( __FILE__ );

          // ...

          function register_plugin_settings( $pluginfile ) {
              // percorso completo comprensivo di "cartella" del Plugin
              add_action( 'plugin_action_links_' . basename( dirname
          ( $pluginfile ) ) . '/' . basename( $pluginfile ), 
                  array( &$this, 'plugin_settings' ), 10, 4 );

                  add_filter( 'plugin_row_meta',  'add_plugin_links', 10, 2);
          }

          function add_plugin_links($links, $file) {
              if( $file == plugin_basename( __FILE__ ) ) {
                 $links[] = '<strong style="color:#fa0">Per ulteriori informazioni
          visita <a href="http://labs.saidmade.com">Labs Saidmade</a></strong>';
          	 }
              return $links;
          }




sabato 22 maggio 2010
plugin attivo




sabato 22 maggio 2010
plugin disattivo




sabato 22 maggio 2010
plugin disattivo




                        a dimostrazione che il codice del plugin
                            viene eseguito solo quando viene
                                        attivato



sabato 22 maggio 2010
help contestuale




          function plugin_setup() {
              $plugin_page = add_submenu_page("index.php", 
                 $this->plugin_name, $this->plugin_name, 10, 
                 $this->plugin_slug, array( $this, “menu”));
           
              if (function_exists(“add_contextual_help”)) {
          	 add_contextual_help( $plugin_page ,”<strong>WP MioPlugin</strong>” );
              }       
          }




sabato 22 maggio 2010
help contestuale




          function plugin_setup() {
              $plugin_page = add_submenu_page("index.php", 
                 $this->plugin_name, $this->plugin_name, 10, 
                 $this->plugin_slug, array( $this, “menu”));
           
              if (function_exists(“add_contextual_help”)) {
          	 add_contextual_help( $plugin_page ,”<strong>WP MioPlugin</strong>” );
              }       
          }




sabato 22 maggio 2010
dashboard




          add_action('wp_dashboard_setup', 'add_dashboard_widget' );

          function add_dashboard_widget() {
              wp_add_dashboard_widget( 'wp-mioplugin', 'Titolo',
          'dashboard_widget_function' );
          }

          function dashboard_widget_function() {
              echo "MioPlugin";
          }




sabato 22 maggio 2010
Grazie a tutti per
                            l’ascolto


sabato 22 maggio 2010
per informazioni e contatti
                           http://www.saidmade.com
                            http://www.undolog.com

                               info@saidmade.com

                              WordCamp - Milano 22 Maggio 2010

                          Giovambattista Fazioli - CTO Saidmade Srl




sabato 22 maggio 2010

More Related Content

Viewers also liked

Recommendation letter Brother Anderson
Recommendation letter Brother AndersonRecommendation letter Brother Anderson
Recommendation letter Brother AndersonChaning Schofield
 
Cats and dogs / кошки и собаки
Cats and dogs / кошки и собакиCats and dogs / кошки и собаки
Cats and dogs / кошки и собакиGarriMkrtchyan
 
Recensione baron wittard
Recensione baron wittardRecensione baron wittard
Recensione baron wittardincantevole
 
Tv Drama Key Vocab
Tv Drama Key VocabTv Drama Key Vocab
Tv Drama Key VocabJoe Bell
 
Various Roles with Hewlett Packard
Various Roles with Hewlett PackardVarious Roles with Hewlett Packard
Various Roles with Hewlett PackardAnoop Chopra
 
CURRICULUM VITAE ENG
CURRICULUM VITAE ENGCURRICULUM VITAE ENG
CURRICULUM VITAE ENGAlfredo Cota
 

Viewers also liked (11)

Recommendation letter Brother Anderson
Recommendation letter Brother AndersonRecommendation letter Brother Anderson
Recommendation letter Brother Anderson
 
CaseStudyHomehealth
CaseStudyHomehealthCaseStudyHomehealth
CaseStudyHomehealth
 
Cats and dogs / кошки и собаки
Cats and dogs / кошки и собакиCats and dogs / кошки и собаки
Cats and dogs / кошки и собаки
 
Recensione baron wittard
Recensione baron wittardRecensione baron wittard
Recensione baron wittard
 
Corridor rv
Corridor rvCorridor rv
Corridor rv
 
Tv Drama Key Vocab
Tv Drama Key VocabTv Drama Key Vocab
Tv Drama Key Vocab
 
Various Roles with Hewlett Packard
Various Roles with Hewlett PackardVarious Roles with Hewlett Packard
Various Roles with Hewlett Packard
 
la educación propia de los indigenas
la educación propia de los indigenasla educación propia de los indigenas
la educación propia de los indigenas
 
VeterinaryCoverLetter
VeterinaryCoverLetterVeterinaryCoverLetter
VeterinaryCoverLetter
 
etno educacion
etno educacionetno educacion
etno educacion
 
CURRICULUM VITAE ENG
CURRICULUM VITAE ENGCURRICULUM VITAE ENG
CURRICULUM VITAE ENG
 

Similar to Speech Wordcamp 2010 - Giovambattista Fazioli

PHP Object Injection in Joomla...questo sconosciuto!
PHP Object Injection in Joomla...questo sconosciuto!PHP Object Injection in Joomla...questo sconosciuto!
PHP Object Injection in Joomla...questo sconosciuto!_EgiX
 
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
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletLuca Bartoli
 
Gestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerGestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerMassimiliano Arione
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressEnrico Zimuel
 
Diario Di Viaggio con Wordpress
Diario Di Viaggio con WordpressDiario Di Viaggio con Wordpress
Diario Di Viaggio con Wordpressgeko
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsKnowCamp
 
Thesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blog
Thesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blogThesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blog
Thesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blogTiziano Fogliata
 
Gestire librerie di frontend in php
Gestire librerie di frontend in phpGestire librerie di frontend in php
Gestire librerie di frontend in phpMassimiliano Arione
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
Corso PHP ENAIP - lezione #04 - 28/01/2014
Corso PHP ENAIP - lezione #04 - 28/01/2014Corso PHP ENAIP - lezione #04 - 28/01/2014
Corso PHP ENAIP - lezione #04 - 28/01/2014Matteo Moro
 
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro businessphpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro businessLuca Scarpa
 
Ottimizzare WordPress su Windows/IIS
Ottimizzare WordPress su Windows/IISOttimizzare WordPress su Windows/IIS
Ottimizzare WordPress su Windows/IISpietrobr
 
Word press e iis
Word press e iisWord press e iis
Word press e iispietrobr
 

Similar to Speech Wordcamp 2010 - Giovambattista Fazioli (20)

PHP Object Injection in Joomla...questo sconosciuto!
PHP Object Injection in Joomla...questo sconosciuto!PHP Object Injection in Joomla...questo sconosciuto!
PHP Object Injection in Joomla...questo sconosciuto!
 
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
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
 
Gestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerGestione delle dipendenze con Composer
Gestione delle dipendenze con Composer
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in Wordpress
 
Diario Di Viaggio con Wordpress
Diario Di Viaggio con WordpressDiario Di Viaggio con Wordpress
Diario Di Viaggio con Wordpress
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more things
 
Sviluppare moduli per il client web
Sviluppare moduli per il client webSviluppare moduli per il client web
Sviluppare moduli per il client web
 
Thesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blog
Thesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blogThesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blog
Thesis, WordPress e fantasia: tre ingredienti per migliorare il tuo blog
 
Gestire librerie di frontend in php
Gestire librerie di frontend in phpGestire librerie di frontend in php
Gestire librerie di frontend in php
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
eZ publish - Extension
eZ publish - ExtensioneZ publish - Extension
eZ publish - Extension
 
Corso PHP ENAIP - lezione #04 - 28/01/2014
Corso PHP ENAIP - lezione #04 - 28/01/2014Corso PHP ENAIP - lezione #04 - 28/01/2014
Corso PHP ENAIP - lezione #04 - 28/01/2014
 
Podcast generator
Podcast generatorPodcast generator
Podcast generator
 
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro businessphpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
phpDay 2008 - Joomla! 1.5 - Soluzione opensource per il vostro business
 
Ottimizzare WordPress su Windows/IIS
Ottimizzare WordPress su Windows/IISOttimizzare WordPress su Windows/IIS
Ottimizzare WordPress su Windows/IIS
 
Word press e iis
Word press e iisWord press e iis
Word press e iis
 

Speech Wordcamp 2010 - Giovambattista Fazioli

  • 2. Wordpress Pillole di sviluppo tips & tricks http://www.saidmade.com WordCamp - Milano 22 Maggio 2010 Giovambattista Fazioli - CTO Saidmade Srl sabato 22 maggio 2010
  • 3. WordPress Pillole di sviluppo tips & tricks http://www.undolog.com WordCamp - Milano 22 Maggio 2010 Giovambattista Fazioli - CTO Saidmade Srl sabato 22 maggio 2010
  • 5. •come strutturare un plugin: un possibile scheletro sabato 22 maggio 2010
  • 6. •come strutturare un plugin: un possibile scheletro •ottimizzazione sabato 22 maggio 2010
  • 7. •come strutturare un plugin: un possibile scheletro •ottimizzazione •tips & tricks sabato 22 maggio 2010
  • 8. come wordpress riconosce un plugin sabato 22 maggio 2010
  • 9. esegue una dir() nella cartella /plugins ed apre - tramite un fopen() - "tutti" i file alla ricerca dell'header comment un commento formattato in modo particolare che permette a Wordpress di riconoscere un plugin sabato 22 maggio 2010
  • 10. se inseriamo nella cartella /plugins un file mioplugin.php così configurato: <?php // genero errore for() a = 4/0; ?> sabato 22 maggio 2010
  • 11. se inseriamo nella cartella /plugins un file mioplugin.php così configurato: <?php // genero errore for() a = 4/0; ?> non accade nulla sabato 22 maggio 2010
  • 12. se inseriamo l’header comment <?php /* Plugin Name: WP MioPlugin Plugin URI: http://www.saidmade.com/ Description: WP MioPlugin Version: 1.0.0 Author: Giovambattista Fazioli Author URI: http://www.saidmade.com Disclaimer: Use at your own risk. No warranty expressed or implied is provided. */ // genero errore for() a = 4/0; ?> sabato 22 maggio 2010
  • 13. se inseriamo l’header comment <?php /* Plugin Name: WP MioPlugin Plugin URI: http://www.saidmade.com/ Description: WP MioPlugin Version: 1.0.0 Author: Giovambattista Fazioli Author URI: http://www.saidmade.com Disclaimer: Use at your own risk. No warranty expressed or implied is provided. */ // genero errore for() a = 4/0; ?> non accade nulla sabato 22 maggio 2010
  • 16. se attiviamo il plugin... sabato 22 maggio 2010
  • 17. <?php /* Plugin Name: WP MioPlugin Plugin URI: http://www.saidmade.com/ Description: WP MioPlugin Version: 1.0.0 Author: Giovambattista Fazioli Author URI: http://www.saidmade.com Disclaimer: Use at your own risk. No warranty expressed or implied is provided. */ echo “Plugin Attivo”; ?> la scritta “Plugin Attivo” verrà visualizzata sia lato Frontend che lato Backend sabato 22 maggio 2010
  • 20. • Wordpress esegue sempre una dir() in /plugins sabato 22 maggio 2010
  • 21. • Wordpress esegue sempre una dir() in /plugins • apre i file - con una fopen() - alla ricerca dell’header sabato 22 maggio 2010
  • 22. • Wordpress esegue sempre una dir() in /plugins • apre i file - con una fopen() - alla ricerca dell’header • esegue il codice solo quando il plugin è attivo sabato 22 maggio 2010
  • 23. distinguere il frontend dal backend sabato 22 maggio 2010
  • 27. if( is_admin() ) {     require_once( 'backend.php' ); } else {     require_once( 'frontend.php' ); } sabato 22 maggio 2010
  • 28. if( is_admin() ) {     require_once( 'backend.php' ); } else {     require_once( 'frontend.php' ); } Questa è di per sé già una forma di ottimizzazione in quanto abbiamo separato i “possibili” ambienti su cui potrà operare il nostro plugin sabato 22 maggio 2010
  • 29. plugin che operano solo lato backend if( is_admin() ) {     require_once( 'backend.php' ); } else {     // require_once( 'frontend.php' ); } sabato 22 maggio 2010
  • 30. plugin che operano solo lato frontend if( is_admin() ) {     // require_once( 'backend.php' ); } else {     require_once( 'frontend.php' ); } sabato 22 maggio 2010
  • 33. • la classe funziona da NameSpace sabato 22 maggio 2010
  • 34. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni sabato 22 maggio 2010
  • 35. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni • protezione verso altri plugin sabato 22 maggio 2010
  • 36. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni • protezione verso altri plugin • sviluppo del plugin secondo una filosofia Object Oriented sabato 22 maggio 2010
  • 37. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni • protezione verso altri plugin • sviluppo del plugin secondo una filosofia Object Oriented • ereditarietà tra classi sabato 22 maggio 2010
  • 38. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni • protezione verso altri plugin • sviluppo del plugin secondo una filosofia Object Oriented • ereditarietà tra classi • miglior riutilizzo del codice sabato 22 maggio 2010
  • 39. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni • protezione verso altri plugin • sviluppo del plugin secondo una filosofia Object Oriented • ereditarietà tra classi • miglior riutilizzo del codice • fa figo... sabato 22 maggio 2010
  • 41. // load the core class require_once( 'wp-mioplugin_class.php'); // check admin if( is_admin() ) { // load admin class     require_once( 'wp-mioplugin_backend.php' );     // create object     $wp_mioplugin_backend = new WPMIOPLUGIN_BACKEND(); } else { // load client front-end class     require_once( 'wp-mioplugin_frontend.php'); // create object     $wp_mioplugin_frontend = new WPMIOPLUGIN_FRONTEND(); } sabato 22 maggio 2010
  • 42. class WPMIOPLUGIN_CLASS { var $version = “1.0.0”; var $plugin_name = “WP Mio Plugin”; var $plugin_slug = “wp-mio-plugin”; ... } class WPMIOPLUGIN_BACKEND extends WPMIOPLUGIN_CLASS { var $onlyBackend = “solo per backend”; function WPMIOPLUGIN_BACKEND() { echo $this->version; } } sabato 22 maggio 2010
  • 43. class WPMIOPLUGIN_CLASS { var $version = “1.0.0”; var $plugin_name = “WP Mio Plugin”; var $plugin_slug = “wp-mio-plugin”; ... } class WPMIOPLUGIN_FRONTEND extends WPMIOPLUGIN_CLASS { var $onlyFrontend = “solo per frontend”; function WPMIOPLUGIN_FRONTEND() { echo $this->version; } } sabato 22 maggio 2010
  • 46. • caricare solo il codice PHP che ci serve in base al contesto in cui operiamo: Backend, Frontend, Pagine Template, etc... sabato 22 maggio 2010
  • 47. • caricare solo il codice PHP che ci serve in base al contesto in cui operiamo: Backend, Frontend, Pagine Template, etc... • caricare script e stili seguendo la regola di sopra sabato 22 maggio 2010
  • 48. • caricare solo il codice PHP che ci serve in base al contesto in cui operiamo: Backend, Frontend, Pagine Template, etc... • caricare script e stili seguendo la regola di sopra • utilizzare le funzioni: sabato 22 maggio 2010
  • 49. • caricare solo il codice PHP che ci serve in base al contesto in cui operiamo: Backend, Frontend, Pagine Template, etc... • caricare script e stili seguendo la regola di sopra • utilizzare le funzioni: • wp_register_style() / wp_register_script() sabato 22 maggio 2010
  • 50. • caricare solo il codice PHP che ci serve in base al contesto in cui operiamo: Backend, Frontend, Pagine Template, etc... • caricare script e stili seguendo la regola di sopra • utilizzare le funzioni: • wp_register_style() / wp_register_script() • wp_enqueue_style() / wp_enqueue_script() sabato 22 maggio 2010
  • 51. $this->url         = plugins_url("", __FILE__ ); $this->plugin_name = "WP MioPlugin"; $this->plugin_slug = "wp-mioplugin"; add_action('admin_init', array( $this, 'plugin_init') ); add_action('admin_menu', array( $this, 'plugin_setup') ); function plugin_init() {     wp_register_style('wp-mioplugin-style-css', $this->url . "/css/ style.css");      } function plugin_setup() {     $plugin_page = add_submenu_page("index.php",         $this->plugin_name, $this->plugin_name, 10,         $this->plugin_slug, array( $this, "menu"));              add_action( 'admin_print_scripts-'. $plugin_page,         array( $this, 'plugin_admin_scripts') );          add_action( 'admin_print_styles-'. $plugin_page,        array( $this, 'plugin_admin_styles') ); } sabato 22 maggio 2010
  • 52. function plugin_admin_styles() {     wp_enqueue_style('wp-mioplugin-style-css'); } function plugin_admin_scripts() {     wp_enqueue_script('wp-mioplugin-main-js' ,          $this->url . '/js/main.js' , array ( 'jquery' ) , '1.4' , true ); } sabato 22 maggio 2010
  • 53. tips & tricks sabato 22 maggio 2010
  • 56. // istanza oggetto backend nel file principale $wp_mioplugin_admin->register_plugin_settings( __FILE__ ); // ... function register_plugin_settings( $pluginfile ) {     // percorso completo comprensivo di "cartella" del Plugin     add_action( 'plugin_action_links_' . basename( dirname ( $pluginfile ) ) . '/' . basename( $pluginfile ),          array( &$this, 'plugin_settings' ), 10, 1 ); } function plugin_settings( $links ) {     $settings_link = '<a href="index.php?page=WP MioPlugin">' . __ ('Settings') . '</a>';     // Prepend one or more elements to the beginning of an array     array_unshift( $links, $settings_link );     return $links; } sabato 22 maggio 2010
  • 59. // istanza oggetto backend nel file principale $wp_mioplugin_admin->register_plugin_settings( __FILE__ ); // ... function register_plugin_settings( $pluginfile ) {     // percorso completo comprensivo di "cartella" del Plugin     add_action( 'plugin_action_links_' . basename( dirname ( $pluginfile ) ) . '/' . basename( $pluginfile ),          array( &$this, 'plugin_settings' ), 10, 4 ); add_filter( 'plugin_row_meta',  'add_plugin_links', 10, 2); } function add_plugin_links($links, $file) {     if( $file == plugin_basename( __FILE__ ) ) {        $links[] = '<strong style="color:#fa0">Per ulteriori informazioni visita <a href="http://labs.saidmade.com">Labs Saidmade</a></strong>'; }     return $links; } sabato 22 maggio 2010
  • 60. plugin attivo sabato 22 maggio 2010
  • 62. plugin disattivo a dimostrazione che il codice del plugin viene eseguito solo quando viene attivato sabato 22 maggio 2010
  • 63. help contestuale function plugin_setup() {     $plugin_page = add_submenu_page("index.php",         $this->plugin_name, $this->plugin_name, 10,         $this->plugin_slug, array( $this, “menu”));       if (function_exists(“add_contextual_help”)) { add_contextual_help( $plugin_page ,”<strong>WP MioPlugin</strong>” );     }        } sabato 22 maggio 2010
  • 64. help contestuale function plugin_setup() {     $plugin_page = add_submenu_page("index.php",         $this->plugin_name, $this->plugin_name, 10,         $this->plugin_slug, array( $this, “menu”));       if (function_exists(“add_contextual_help”)) { add_contextual_help( $plugin_page ,”<strong>WP MioPlugin</strong>” );     }        } sabato 22 maggio 2010
  • 65. dashboard add_action('wp_dashboard_setup', 'add_dashboard_widget' ); function add_dashboard_widget() {     wp_add_dashboard_widget( 'wp-mioplugin', 'Titolo', 'dashboard_widget_function' ); } function dashboard_widget_function() {     echo "MioPlugin"; } sabato 22 maggio 2010
  • 66. Grazie a tutti per l’ascolto sabato 22 maggio 2010
  • 67. per informazioni e contatti http://www.saidmade.com http://www.undolog.com info@saidmade.com WordCamp - Milano 22 Maggio 2010 Giovambattista Fazioli - CTO Saidmade Srl sabato 22 maggio 2010