Speech Wordcamp 2010 - Giovambattista Fazioli
-
Upload
nicola-ballotta -
Category
Technology
-
view
2.105 -
download
2
description
Transcript of Speech Wordcamp 2010 - Giovambattista Fazioli
sabato 22 maggio 2010
WordpressPillole di sviluppo tips & tricks
WordCamp - Milano 22 Maggio 2010
Giovambattista Fazioli - CTO Saidmade Srl
http://www.saidmade.com
sabato 22 maggio 2010
WordPressPillole di sviluppo tips & tricks
WordCamp - Milano 22 Maggio 2010
Giovambattista Fazioli - CTO Saidmade Srl
http://www.undolog.com
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 wordpressriconosce un plugin
sabato 22 maggio 2010
esegue una dir() nella cartella/plugins ed apre
- tramite un fopen() - "tutti" i file alla ricerca
dell'header commentun 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 errorefor()a = 4/0;?>
sabato 22 maggio 2010
se inseriamo nella cartella /plugins un file mioplugin.php così
configurato:
<?php// genero errorefor()a = 4/0;?>
non accade nullasabato 22 maggio 2010
se inseriamo l’header comment
<?php/*Plugin Name: WP MioPluginPlugin URI: http://www.saidmade.com/Description: WP MioPluginVersion: 1.0.0Author: Giovambattista FazioliAuthor URI: http://www.saidmade.comDisclaimer: Use at your own risk. No warranty expressed or implied is provided.*/
// genero errorefor()a = 4/0;?>
sabato 22 maggio 2010
se inseriamo l’header comment
<?php/*Plugin Name: WP MioPluginPlugin URI: http://www.saidmade.com/Description: WP MioPluginVersion: 1.0.0Author: Giovambattista FazioliAuthor URI: http://www.saidmade.comDisclaimer: Use at your own risk. No warranty expressed or implied is provided.*/
// genero errorefor()a = 4/0;?>
non accade nullasabato 22 maggio 2010
sabato 22 maggio 2010
sabato 22 maggio 2010
se attiviamo il plugin...
sabato 22 maggio 2010
<?php/*Plugin Name: WP MioPluginPlugin URI: http://www.saidmade.com/Description: WP MioPluginVersion: 1.0.0Author: Giovambattista FazioliAuthor URI: http://www.saidmade.comDisclaimer: 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 ilfrontend 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 diottimizzazione
in quanto abbiamo separato i “possibili”ambienti su cui potrà operare il nostro plugin
sabato 22 maggio 2010
if( is_admin() ) { require_once( 'backend.php' );} else { // require_once( 'frontend.php' );}
plugin che operano solo lato
backend
sabato 22 maggio 2010
if( is_admin() ) { // require_once( 'backend.php' );} else { require_once( 'frontend.php' );}
plugin che operano solo lato
frontend
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 classrequire_once( 'wp-mioplugin_class.php');
// check adminif( 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 pluginviene 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 contattihttp://www.saidmade.com
http://www.undolog.com
WordCamp - Milano 22 Maggio 2010
Giovambattista Fazioli - CTO Saidmade Srl
sabato 22 maggio 2010