Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Plugins
Code

Scivere Plugins Estendibili con Filtri ed Azioni

by
Difficulty:IntermediateLength:LongLanguages:

Italian (Italiano) translation by Piergiorgio Sansone (you can also view the original English article)

Una delle tante cose che troverete quando studiate il codice sorgente di un buon sviluppatore di plugin sono i ganci personalizzati e filtri che lo sviluppatore ha inserito in tutto il plugin. La presenza di questi ganci di azione e filtri rendono il plugin "estendibile", che significa che altri plugin e temi possono modificare o aggiungersi sul comportamento del plugin.

Scrivere plugin estendibile è qualcosa che consigliamo vivamente di fare. Ci sono un sacco di ottimi motivi perché si dovrebbe fare, ma pochissimi (se qualsiasi) motivi perché si dovrebbe evitare questa pratica.

Ci accingiamo a guardare diversi elementi del plugin estendibile:

  • Una spiegazione di che cosa sono i plugin estendibile
  • Motivi perché si dovrebbe scrivere plugin estendibile
  • Gli strumenti di base di cui avete bisogno
  • Come dovrete scrivere il vostro plugin per renderli estendibili
  • Semplici esempi di ganci e filtri per illustrarvi  come sia possibile utilizzarli.

Una nota importante: questo tutorial prevede di utilizzare tecniche di programmazione a base meramente procedurale. Tutto ciò di cui parlerò è applicabile quando si utilizza la Programmazione Orietata agli Oggetti (OOP), ma in prima battuta,  è più semplice imparare queste tecniche in un ambiente procedurale.


Che cosa è un Plugin estendibile?

Un plugin estendibile è uno che può essere modificato e ampliato oltre il suo scopo originale di un altro plugin o tema. Quando un plugin è estensibile, altri plugin (o temi) possono alterare il comportamento o l'output del plugin.  Ad esempio, i plugin per l' e-commerce prevedono componenti aggiuntivi come i gateway di pagamento che consentono acquisti elaborati tramite altri sistemi di pagamento. Questi gateway di pagamento, sono plugin separati che semplicemente si connettono con il plugin principale e ne estendono la funzionalità.

Ogni plugin può essere estensibile, anche se lo sono, solo una piccola minoranza di plugin pubblicati. Per renderlo estensibile, o modulare (un'altro termine per dire la stessa cosa) uno sviluppatore di plugin deve consapevolmente decidere di fare in questo modo, sviluppare gli elementi necessari afficchè il comportamento di altri temi o plugin si leghino al plugin principale.


Perché scrivere plugin estendibili?

Ci sono un sacco di buone ragioni per scrivere un plugin estendibile, ma uno dei motivi principali è che semplicemente non c'è una buona ragione per non scrivere il tuo plugin in questo modo, soprattutto non quando il vostro plugin viene  rilasciato alla comunità di WordPress, sia come plugin gratuito o a pagamento.

Quando scrivete plugin estendibile,  consentite  agli altri sviluppatori di estendere il vostro plugin e renderlo migliore, ma senza mai modificare il codice sorgente di base. Rendete anche significativamente più facile a sviluppatori ed utenti di adattare il plugin per soddisfare meglio le loro esigenze. Permettetemi di darvi un esempio: nel mio plugin Easy Digital download c'è un sistema di codice di sconto. Il codice sconto è ristretto ad un singolo download per utente , cosi se un utente prova ad applicare lo stesso sconto su due differenti acquisti riceverà un messaggio di errore. Uno dei miei utenti reali  non voleva limitare gli sconti per un uso singolo per ogni utente, quindi le ho dato una semplice funzione che ha inserito in un nuovo plugin personalizzato e senza toccare alcun codice del plugin di base, ha rimosso la restizione.

Il codice estendibile inotre rende gli sviluppatori estremamente contenti quando lo trovano, perchè il loro lavoro per adattare il codice diventa molto, ma molto più semplice.


Gli Strumenti Base / Funzioni

Ci sono diversi strumenti chiave necessari  per scrivere un plugin estendibile. Se avete scritto qualsiasi plugin o tema prima di leggere questo articolo,  probabilmente avrete una certa familiarità con queste funzioni, anche solo perché le avete viste usare.

Prima di illustrarvi le funzioni che utilizzerete, parliamo prima di due concetti principali: ganci e filtri.

Un gancio Azione (action hook)  è un area nel tuo plugin che può essere "agganciato" sottoforma di funzioni (sia nel vostro plugin che in altri plugin) al fine di avere il loro codice eseguito in quel punto. Quando un gancio Azione viene eseguito , tutte le funzioni ad esso collegate o agganciate vengono anch'esse eseguite.

Un gancio Filtro (Filter hook)  è posizionati anch'esso in un punto nel tuo plugin per legarlo ad altre funzioni, ma funzionano in modo leggermente diverso rispetto alle azioni. I Filtri consentono ai dati  di essere manipolati o modificati prima del loro utilizzo.

La differenza chiave che intercorre tra Azioni e Filtri è che le Azioni sono solitamente utilizzate per eseguire funzioni ed i Filtri vengono solitamente utilizzati per manipolare i dati.

A meno che non abbiate già grande familiarità con azioni e filtri, vi invito caldamente ad andare a leggere il Codex cosa dice su di loro.

Per le Azioni esistono quattro funzioni principali:

  • do_action() - definisce una posizione associabile per azioni (funzione con cui si richiamano le azioni)
  • add_action() - questo attribuisce una funzione ad un gancio creato con do_action()
  • has_action() - Questo consente di verificare se un'azione è stata registrata con do_action()
  • remove_action() - questo rimuove un'azione che è stata impostata con add_action()

Di queste quattro, le più utilizzate sono do_action() e add_action() .

Anche per i Filtri ci sono quattro funzioni principali:

  • apply_filters() - questo crea un percorso modificato per i filtri personalizzati per legarli
  • add_filter() - Questo associa un filtro personalizzato ad un gancio creato con apply_filters()
  • has_filter() - Questo consente di verificare se un filtro è stato registrato con apply_filters()
  • remove_filter() - questo rimuove un filtro precedentemente connesso a apply_filters()

Come avviene per le azioni, apply_filters() e add_filter() sono le funzioni più utilizzate.

Se, a questo punto, ti senti confuso non ti preoccupare, nella sezione successiva vedremo come andranno effettivamente utilizzati.


Attuazione nel Vostro Plugin.

Al fine di rendere il vostro plugin veramente estendibile, è necessario utilizzare le funzioni chiave di cui sopra in tutto l'intero plugin. In un primo momento potrebbe essere difficoltoso, ingombrante, fastidioso, inserire costantemente queste funzioni aggiuntive in tutto il codice, soprattutto quando non se ne vede un beneficio immediato o un loro utilizzo.

Quello che troverete, tuttavia, è che una volta  abituati a scrivere il vostro plugin con tutte queste funzioni in mente, diventerà quasi naturale inserirli nel codice.

Ci sono alcuni scenari principali dove utilizzerete i filtri nel vostro plugin:

  • Quando le matrici sono settate. I Filtri verranno aggiunti qui affinché altri plugin pussano modificare i dati prima di utilizzarlo.
  • Quando gli oggetti dati sono settati. Proprio come con le matrici, si utilizzerà un filtro sugli oggetti così che altri sviluppatori possono alterare l'oggetto prima di utilizzarlo.
  • Quando le stringhe di dati sono settati. Con un filtro è disponibile su una stringa, altri sviluppatori possono cambiare l'intera stringa, modificare parti di esso o aggiungere su di esso.

Degli scenari di cui sopra  più comunemente si utilizzano i filtri quando vengono restituiti dati o appena prima di utilizzarli. Ad esempio, se si dispone di un plugin che esegue una query di post, si consiglia di passare la matrice (array) con gli argomenti della query attraverso un filtro, prima che vengano passati alla funzione get_posts() o WP_Query modo che gli altri possono modificare la query prima che sia eseguita.

Quando si tratta di azioni, ci sono anche diverse istanze principali dove le inserirete:

  • Prima dell'esecuzione di un compito.
  • Dopo l'esecuzione di un compito.
  • All'interno del markup per consentire al markup aggiuntivo di essere inserito.

Consideriamo ora alcuni esempi.

1. Visualizzazione HTML con uno Shortcode

Shortcode che generano output HTML sono estremamente comuni (in realtà sono probabilmente il più comune di tutti i gli shortcode), e uno dei modi in cui possiamo rendere gli shortcode del nostro plugin, più semplici (amichevole) ad altri sviluppatori è fornendo loro un modo di alterarne i contenuti ma senza richiedere che essa vengano annullati e nuovamente registrati.

Tutti gli shortcodes restituiscono, piuttosto che riecheggiano il loro contenuto, il che significa che i dati che stanno per essere visualizzati sullo schermo prima di essere restituiti erano in  forma di stringa. Poiché l'intero output HTML è in forma di stringa, è possibile passare la stringa attraverso un filtro prima di restituirlo. In questo modo renderà possibile per gli altri sviluppatori di modificare il codice HTML del tuo shortcode.

Uno sviluppatore che volesse aggiungere markup aggiuntivo prima e dopo il default HTML: con il filtro in quel punto, può farlo.

Il tuo shortcode potrebbe essere qualcosa come questo:

Possiamo migliorare questo con l'aggiunta di un filtro al ritorno, come questo:

È ora possibile modificare il codice HTML nel nostro shortcode come questo:

Questo si tradurrà nel codice HTML originale creato nello shortcode di essere racchiuso con un altro tag div.

2. Eseguire una query di post

L'esecuzione di query personalizzate nei plugin è una pratica comune. Supponiamo per un momento che hai scritto un plugin che registra un tipo di post personalizzato (custom post type) chiamato "libri" e nel tuo plugin è una funzione per mostrare i libri creati. La funzione per interrogare i libri potrebbe essere simile a questa:

Ma cosa succede se un utente desidera modificare i tipi di libri che sono stati restituiti, forse selezionando solo i libri da una specifica categoria ? Puoi renderlo più facile per loro in questo modo:

L'unica modifica che ho fatto è stato aggiungere un filtro intorno al $query_args, significa che altri sviluppatori (o utenti) possono modificare gli argomenti della query prima che vengano effettivamente passati a WP_Query. Per esempio, potremmo impostare la query per visualizzare solo i libri da autore 3 come questo:

3. estensione del Markup

Estendere per esempio il numero 2 ora, e renderlo ancora migliore. Abbiamo già aggiunto un filtro che consente agli utenti di modificare la query, ora andiamo ad aggiungere un paio di ganci per farci alterare il codice HTML che viene creato.

In primo luogo modificheremo un pò il nostro HTML originale:

Ora vorremmo rendere possibile agli sviluppatori di inserire markup aggiuntivo in vari punti, come i seguenti:

  • Prima di qualsiasi codice HTML visualizzato
  • Dopo il codice HTML finale
  • Prima del titolo di ogni libro
  • Dopo il titolo di ogni libro

Possiamo immaginare uno scenario in cui un utente vorrebbe aggiungere un'anteprima, prima o dopo il titolo del libro. Per renderlo possibile, usiamo do_action() per creare percorsi hookable, come questo:

Si noti che i due ganci interni (che circondano il titolo) hanno un secondo parametro di get_the_ID(). Questa variabile,  sarà l'ID del libro, sarà disponibile come parametro per qualsiasi funzione di collegamento. Per aggiungere la  miniatura del libro, per esempio, possiamo fare questo:


Esempi reali

Ora mi piacerebbe di mostrarvi alcuni esempi reali di plugin che sono estendibili, compresi i campioni di alcune delle loro funzioni estensibile.

1. Soliloquy

Soliloquy è un potente plugin di WordPress per la  visualizzazione di immagini che consente di creare e mantenere il cusore di immagini reattivo, efficiente, sicuro e SEO friendly.

Quasi tutto in questo plugin è estensibile. Qui è solo un esempio:

Questo è come Thomas Griffin (sviluppatore del plugin) consente di impostare gli argomenti per entrambi, attributi ed etichette del custom post type. La presenza dei suoi due filtri, tgmsp_post_type_labels e tgmsp_post_type_args, lo rendono molto semplice per gli altri sviluppatori per  rinominare il tipo di post slider o modificare quello che supporta il tipo di post.

2. bbPress

Di gran lunga uno dei miei plugin preferiti di tutti i tempi, bbPress è plugin WordPress per un forum con funzionalità complete. Il plugin intero è un perfetto esempio di come rendere il vostro plugin estendibile, ci sono letteralmente azioni e filtri ovunque. Ha un filtro particolare che viene applicato quando si recuperano il contenuto di un forum:

Prima che venga restituito il contenuto del forum, è passa  attraverso un filtro chiamato bbp_get_forum_content che rende possibile per uno sviluppatore di modificare il contenuto prima che venga mai visualizzato.

3.Easy Digital Download

Easy Digital download, o EDD, è uno dei miei plugin che è stato costruito per rendere eccezionalmente facile la vendita di prodotti digitali attraverso WordPress. Come la maggior parte dei plugin di e-commerce, EDD ha un processo di checkout che attraverso il quale  l'acquirente può accedere ai suoi dettagli personali e di pagamento. Dopo che tutte queste info vengono raccolte, vengono prese  tutte da un gateway di pagamento (un sistema per l'elaborazione del pagamento), ma prima che vadano al gateway, viene applicato un filtro che permette ai dati di essere manipolati prima di essere utilizzati dal sistema di pagamento:

La presenza di questo filtro permette di regolare gli importi di acquisto (forse per sconti speciali), aggiungere tassazione, forse aggiungere o rimuovere prodotti dall'acquisto e molto, molto di più.


Conclusione

Plugin estendibili sono a vantaggio di tutti: lo sviluppatore originale, altri sviluppatori e gli utenti stessi.

Ci sono così tanti motivi perché dobbiate scrivere il vostro plugin con codice estensibile che avete in mente, allora perchè non lo fate?

Gli strumenti presentati qui sono tutto ciò di cui avete bisogno per iniziare. Avete domande? Chiedete pure!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.