Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Child Plugins

Child Plugins

Scopriamo insieme cosa sono i child plugins di Francesco Grasso

WordPress Meetup Catania

November 28, 2017
Tweet

More Decks by WordPress Meetup Catania

Other Decks in Education

Transcript

  1. Francesco Grasso Web Developer @yithemes.com Trainer @Your Inspiration WordPress Lover

    WordPress Meetup Catania Organizer @francgrasso WordPress Meetup Catania - Francesco Grasso - Child Plugins
  2. Esigenza: - Aggiungere funzionalità ad un plugin di cui non

    siamo autori - Evitare di perdere funzionalità aggiunte al primo update del plugin - Evitare di riscrivere logiche di funzionamento già implementate dal plugin scelto come base di partenza - Modificare il comportamento di un plugin in base ai nostri requisiti ed alle nostre necessità WordPress Meetup Catania - Francesco Grasso - Child Plugins
  3. Domanda: Probabilmente se sei uno sviluppatore ne avrai già sentito

    parlare… O ti sarai posto la domanda… ESISTONO??? WordPress Meetup Catania - Francesco Grasso - Child Plugins
  4. Il concetto di “Child Plugin” è un po’ diverso da

    quello di Child Theme I Child Theme seguono un’impostazione fissa e ben definita da WordPress. Hanno una sezione nel file principale del child che identifica il tema di partenza, impedendo l’attivazione qualora il “parent” fosse non disponibile o danneggiato. WordPress Meetup Catania - Francesco Grasso - Child Plugins
  5. Requisito fondamentale: Il plugin di partenza deve essere scritto rispettando

    i più basilari standard di programmazione ed i suggerimenti del modello di sviluppo WordPress. Es. - se una funzione/metodo restituisce un valore, questo deve avere un filtro - se il plugin fa uso di template, questi devono essere richiamati secondo una procedura che prevede un overwrite (vedi WooCommerce) - all’interno dei template prevedere sempre delle action per “iniettare” nuovi elementi WordPress Meetup Catania - Francesco Grasso - Child Plugins
  6. Come è composto un Child Plugin? E’ a tutti gli

    effetti un normalissimo plugin per WordPress! Assicurati ovviamente che questo non abbia lo stesso nome del plugin di partenza. Non è richiesto un esplicito riferimento al plugin di partenza nell’heading section del plugin. WordPress Meetup Catania - Francesco Grasso - Child Plugins
  7. Come si può personalizzare un plugin tramite Child Plugin? -

    Sfruttare gli Hooks (Action e Filter) - Annullare completamente alcune funzioni/metodi - Sovrascrivere template - Creare un Fork di un plugin WordPress Meetup Catania - Francesco Grasso - Child Plugins
  8. Cosa sono gli Hooks in WordPress Action Hooks “Fai qualcosa

    qui” Possono completamente stravolgere il normale flusso della procedura Filter Hooks Si usano per “modificare” il valore di ritorno di una procedura Accettano uno o più parametri in ingresso Non modificano il normale flusso della procedura WordPress Meetup Catania - Francesco Grasso - Child Plugins
  9. Esempio function la_mia_funzione_inutile(){ //codice vario della funzione do_action('slug_il_mio_action_hook', $args1,$args2); //altro

    codice vario della funzione } Nel Child Plugin potremmo interagire sui parametri ($args1,$args2) sfruttando l’hook 'slug_il_mio_action_hook' add_action('slug_il_mio_action_hook','funzione_hook_callback'); function funzione_hook_callback(){ // Codice vario qui } WordPress Meetup Catania - Francesco Grasso - Child Plugins
  10. Esempio function la_mia_funzione_inutile(){ //codice vario della funzione $output = apply_filters('slug_il_mio_filter_hook',

    $output,$args1,$args2); } Nel Child Plugin potremmo interagire sull’output sfruttando l’hook 'slug_il_mio_action_hook' add_filter('slug_il_mio_action_hook','funzione_hook_callback'); function funzione_hook_callback(){ // Codice vario qui } WordPress Meetup Catania - Francesco Grasso - Child Plugins
  11. Importante! Usa sempre if ! function_exists(‘nomefunzione’){ function nomefunzione(){ … }

    } o if function_exists(‘nomefunzione’){ … } Lo stesso vale per le classi WordPress Meetup Catania - Francesco Grasso - Child Plugins
  12. Cosa fare se il plugin “Parent” non sfrutta correttamente gli

    Hooks - Annullare completamente alcune funzioni/metodi WordPress Meetup Catania - Francesco Grasso - Child Plugins
  13. Cosa fare se il plugin “Parent” non sfrutta correttamente gli

    Hooks - Annullare completamente alcune funzioni/metodi WordPress Meetup Catania - Francesco Grasso - Child Plugins
  14. Esempio - plugin Hello Dolly function remove_hello_dolly_actions(){ remove_action ('admin_notices', 'hello_dolly');

    add_action ('admin_notices', 'change_hello_dolly_lyrics'); } add_action ('plugins_loaded', 'remove_hello_dolly_actions', 20); function my_new_lyrics_text(){ $lyrics = 'My new lyric goes here...'; } function change_hello_dolly_lyrics(){ $chosen = my_new_lyrics_text(); echo "<p id='dolly'>" . $chosen . "</p>"; } WordPress Meetup Catania - Francesco Grasso - Child Plugins
  15. Vantaggi e svantaggi di questa pratica - Anche senza gli

    opportuni hook il plugin viene modificato dal child - Non è necessario apportare modifiche al parent (anche se ne sei l’autore) - Ad ogni update del parent devi verificare che la funzione “sovrascritta” sia ancora utilizzata in quel modo - Il Fatal error è dietro l’angolo - Potresti essere costretto a scrivere un sacco di codice e riscrivere mezzo plugin WordPress Meetup Catania - Francesco Grasso - Child Plugins
  16. Sovrascrivere template Pratica possibile solo se il plugin è predisposto

    per questo. Alcuni riferimenti: https://docs.woocommerce.com/wc-apidocs/function-wc_locate_template.html http://hookr.io/functions/wc_locate_template/ WordPress Meetup Catania - Francesco Grasso - Child Plugins
  17. Fork del plugin parent Da considerare se non è possibile

    sfruttare hooks e sovrascrivere template Come agire: - Assicurarsi di avere sotto controllo di versione il parent (GIT/SVN) - Creare un branch - Rinominare il plugin e apportare le modifiche - Periodicamente fare il merge da master a nostro branch - Attribuire il codice di partenza all’autore del parent - Sottoporre le tue modifiche all’autore del plugin per eventuale integrazione tramite pull request (se sotto git) WordPress Meetup Catania - Francesco Grasso - Child Plugins
  18. Approcci per creare un Child Plugin - Sfruttare gli Hooks

    (Action e Filter) - Annullare completamente alcune funzioni/metodi - Sovrascrivere template - Creare un Fork di un plugin WordPress Meetup Catania - Francesco Grasso - Child Plugins