speech wordcamp 2010 - giovambattista fazioli

67
sabato 22 maggio 2010

Upload: nicola-ballotta

Post on 06-Dec-2014

2.105 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 2: Speech Wordcamp 2010 - Giovambattista Fazioli

WordpressPillole di sviluppo tips & tricks

WordCamp - Milano 22 Maggio 2010

Giovambattista Fazioli - CTO Saidmade Srl

http://www.saidmade.com

sabato 22 maggio 2010

Page 3: Speech Wordcamp 2010 - Giovambattista Fazioli

WordPressPillole di sviluppo tips & tricks

WordCamp - Milano 22 Maggio 2010

Giovambattista Fazioli - CTO Saidmade Srl

http://www.undolog.com

sabato 22 maggio 2010

Page 4: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 5: Speech Wordcamp 2010 - Giovambattista Fazioli

•come strutturare un plugin: un possibile scheletro

sabato 22 maggio 2010

Page 6: Speech Wordcamp 2010 - Giovambattista Fazioli

•come strutturare un plugin: un possibile scheletro•ottimizzazione

sabato 22 maggio 2010

Page 7: Speech Wordcamp 2010 - Giovambattista Fazioli

•come strutturare un plugin: un possibile scheletro•ottimizzazione•tips & tricks

sabato 22 maggio 2010

Page 8: Speech Wordcamp 2010 - Giovambattista Fazioli

come wordpressriconosce un plugin

sabato 22 maggio 2010

Page 9: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 10: Speech Wordcamp 2010 - Giovambattista Fazioli

se inseriamo nella cartella /plugins un file mioplugin.php così

configurato:

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

sabato 22 maggio 2010

Page 11: Speech Wordcamp 2010 - Giovambattista Fazioli

se inseriamo nella cartella /plugins un file mioplugin.php così

configurato:

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

non accade nullasabato 22 maggio 2010

Page 12: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 13: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 14: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 15: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 16: Speech Wordcamp 2010 - Giovambattista Fazioli

se attiviamo il plugin...

sabato 22 maggio 2010

Page 17: Speech Wordcamp 2010 - Giovambattista Fazioli

<?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

Page 18: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 19: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 20: Speech Wordcamp 2010 - Giovambattista Fazioli

• Wordpress esegue sempre una dir() in /plugins

sabato 22 maggio 2010

Page 21: Speech Wordcamp 2010 - Giovambattista Fazioli

• Wordpress esegue sempre una dir() in /plugins

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

sabato 22 maggio 2010

Page 22: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 23: Speech Wordcamp 2010 - Giovambattista Fazioli

distinguere ilfrontend dal

backend

sabato 22 maggio 2010

Page 24: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 25: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 26: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 27: Speech Wordcamp 2010 - Giovambattista Fazioli

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

sabato 22 maggio 2010

Page 28: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 29: Speech Wordcamp 2010 - Giovambattista Fazioli

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

plugin che operano solo lato

backend

sabato 22 maggio 2010

Page 30: Speech Wordcamp 2010 - Giovambattista Fazioli

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

plugin che operano solo lato

frontend

sabato 22 maggio 2010

Page 31: Speech Wordcamp 2010 - Giovambattista Fazioli

classi

sabato 22 maggio 2010

Page 32: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 33: Speech Wordcamp 2010 - Giovambattista Fazioli

• la classe funziona da NameSpace

sabato 22 maggio 2010

Page 34: Speech Wordcamp 2010 - Giovambattista Fazioli

• la classe funziona da NameSpace

• protezione contro la duplicazione di funzioni

sabato 22 maggio 2010

Page 35: Speech Wordcamp 2010 - Giovambattista Fazioli

• la classe funziona da NameSpace

• protezione contro la duplicazione di funzioni

• protezione verso altri plugin

sabato 22 maggio 2010

Page 36: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 37: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 38: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 39: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 40: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 41: Speech Wordcamp 2010 - Giovambattista Fazioli

// 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

Page 42: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 43: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 44: Speech Wordcamp 2010 - Giovambattista Fazioli

ottimizzazioni

sabato 22 maggio 2010

Page 45: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 46: Speech Wordcamp 2010 - Giovambattista Fazioli

• caricare solo il codice PHP che ci serve in base al

contesto in cui operiamo: Backend, Frontend, Pagine

Template, etc...

sabato 22 maggio 2010

Page 47: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 48: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 49: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 50: Speech Wordcamp 2010 - Giovambattista Fazioli

• 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

Page 51: Speech Wordcamp 2010 - Giovambattista Fazioli

$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

Page 52: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 53: Speech Wordcamp 2010 - Giovambattista Fazioli

tips & tricks

sabato 22 maggio 2010

Page 54: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 55: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 56: Speech Wordcamp 2010 - Giovambattista Fazioli

// 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

Page 57: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 58: Speech Wordcamp 2010 - Giovambattista Fazioli

sabato 22 maggio 2010

Page 59: Speech Wordcamp 2010 - Giovambattista Fazioli

// 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

Page 60: Speech Wordcamp 2010 - Giovambattista Fazioli

plugin attivo

sabato 22 maggio 2010

Page 61: Speech Wordcamp 2010 - Giovambattista Fazioli

plugin disattivo

sabato 22 maggio 2010

Page 62: Speech Wordcamp 2010 - Giovambattista Fazioli

plugin disattivo

a dimostrazione che il codice del pluginviene eseguito solo quando viene

attivato

sabato 22 maggio 2010

Page 63: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 64: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 65: Speech Wordcamp 2010 - Giovambattista Fazioli

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

Page 66: Speech Wordcamp 2010 - Giovambattista Fazioli

Grazie a tutti per l’ascolto

sabato 22 maggio 2010

Page 67: Speech Wordcamp 2010 - Giovambattista Fazioli

per informazioni e contattihttp://www.saidmade.com

http://www.undolog.com

[email protected]

WordCamp - Milano 22 Maggio 2010

Giovambattista Fazioli - CTO Saidmade Srl

sabato 22 maggio 2010