Speech Wordcamp 2010 - Giovambattista Fazioli

2,182 views
2,143 views

Published on

Slide dello speech di Giovambattista Fazioli al Wordcamp 2010. Wordpress Plugins: pillole di sviluppo, tips and tricks.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,182
On SlideShare
0
From Embeds
0
Number of Embeds
465
Actions
Shares
0
Downloads
25
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Speech Wordcamp 2010 - Giovambattista Fazioli

  1. 1. sabato 22 maggio 2010
  2. 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. 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
  4. 4. sabato 22 maggio 2010
  5. 5. •come strutturare un plugin: un possibile scheletro sabato 22 maggio 2010
  6. 6. •come strutturare un plugin: un possibile scheletro •ottimizzazione sabato 22 maggio 2010
  7. 7. •come strutturare un plugin: un possibile scheletro •ottimizzazione •tips & tricks sabato 22 maggio 2010
  8. 8. come wordpress riconosce un plugin sabato 22 maggio 2010
  9. 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. 10. se inseriamo nella cartella /plugins un file mioplugin.php così configurato: <?php // genero errore for() a = 4/0; ?> sabato 22 maggio 2010
  11. 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. 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. 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
  14. 14. sabato 22 maggio 2010
  15. 15. sabato 22 maggio 2010
  16. 16. se attiviamo il plugin... sabato 22 maggio 2010
  17. 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
  18. 18. sabato 22 maggio 2010
  19. 19. sabato 22 maggio 2010
  20. 20. • Wordpress esegue sempre una dir() in /plugins sabato 22 maggio 2010
  21. 21. • Wordpress esegue sempre una dir() in /plugins • apre i file - con una fopen() - alla ricerca dell’header sabato 22 maggio 2010
  22. 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. 23. distinguere il frontend dal backend sabato 22 maggio 2010
  24. 24. sabato 22 maggio 2010
  25. 25. sabato 22 maggio 2010
  26. 26. sabato 22 maggio 2010
  27. 27. if( is_admin() ) {     require_once( 'backend.php' ); } else {     require_once( 'frontend.php' ); } sabato 22 maggio 2010
  28. 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. 29. plugin che operano solo lato backend if( is_admin() ) {     require_once( 'backend.php' ); } else {     // require_once( 'frontend.php' ); } sabato 22 maggio 2010
  30. 30. plugin che operano solo lato frontend if( is_admin() ) {     // require_once( 'backend.php' ); } else {     require_once( 'frontend.php' ); } sabato 22 maggio 2010
  31. 31. classi sabato 22 maggio 2010
  32. 32. sabato 22 maggio 2010
  33. 33. • la classe funziona da NameSpace sabato 22 maggio 2010
  34. 34. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni sabato 22 maggio 2010
  35. 35. • la classe funziona da NameSpace • protezione contro la duplicazione di funzioni • protezione verso altri plugin sabato 22 maggio 2010
  36. 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. 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. 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. 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
  40. 40. sabato 22 maggio 2010
  41. 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. 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. 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
  44. 44. ottimizzazioni sabato 22 maggio 2010
  45. 45. sabato 22 maggio 2010
  46. 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. 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. 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. 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. 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. 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. 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. 53. tips & tricks sabato 22 maggio 2010
  54. 54. sabato 22 maggio 2010
  55. 55. sabato 22 maggio 2010
  56. 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
  57. 57. sabato 22 maggio 2010
  58. 58. sabato 22 maggio 2010
  59. 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. 60. plugin attivo sabato 22 maggio 2010
  61. 61. plugin disattivo sabato 22 maggio 2010
  62. 62. plugin disattivo a dimostrazione che il codice del plugin viene eseguito solo quando viene attivato sabato 22 maggio 2010
  63. 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. 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. 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. 66. Grazie a tutti per l’ascolto sabato 22 maggio 2010
  67. 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

×