Non ti sembra che un po' plugin di WordPress sono fortunati? WooCommerce, Facile Digit Scarica, Gravity Forms : ognuno di questi plugin è alimentato da un'intera azienda, con dozzine di estensioni di terze parti e sempre più funzionalità aggiunte da loro che si aggiungono alle potenzialità del plugin. Durante questo periodo, la maggior parte degli altri plugin non riesce a progredire.

Come può un singolo plug-in diventare la base di un fiorente ecosistema tecnologico? Ci sono molte risposte: essere i primi sul mercato, creare un ottimo prodotto, esperti di marketing e tutto il resto. Ma oggi ci concentreremo su una parte importante della risposta tecnica e cioè: l'estensibilità, attraverso il sistema hook di WordPress.

Oggi useremo un esempio di WordPress Plugin per coprire le due funzioni chiave che conferiscono lo stato di estensibilità a un plugin, vale a dire: apply_filters() e do_action().

Estensioni: Estensioni per i plugin

È quindi chiaro che quando parliamo di "estensioni", ci riferiamo a plugin che sono fatti per altri. Facciamo un esempio: " Stripe per WooCommerce '.

Questa estensione non fa nulla se non l'hai già fatto WooCommerce. Se installi WooCommerce, quindi acquista e installa “ Striscia per WooCommerce Come plug-in separato, espanderà le funzionalità di WooCommerce in modo da poter iniziare ad accettare pagamenti tramite il gateway di pagamento Stripe.

Quindi hai un plugin che migliora un altro plugin in un modo specifico. È un'estensione. Questi sono avverbi dell'ecosistema WordPress.

Come funzionano le funzioni: apply_filters () e do_action ()?

La prossima domanda: come fa WooCommerce a vedere la sua funzionalità estesa? Dopotutto, è facile immaginare di scrivere un plug-in di e-commerce che " funziona solo con un paio di gateway di pagamento ". Quindi, se vuoi davvero Stripe dovrai modificare completamente WooCommerce e probabilmente finire per creare il tuo strumento chiamato StripeCommerce, che diventa un concorrente di WooCommerce o semplicemente vive sul sito di uno dei tuoi clienti che potrebbero permettersi di pagare assistenza personalizzata.

È un casino da contemplare, ma per fortuna WooCommerce sta facendo qualcosa di molto meglio. Fa uso di due funzioni: apply_filters () e do_action (). Queste due funzioni consentono di creare parentesi su WordPress e questa è una parte fondamentale del sistema di hook di WordPress in generale.

apply_filters () e do_action () Una differenza piuttosto semplice:

  • apply_filters () consente di collegare i filtri alle funzioni.
  • do_action () ti permette di connettere le azioni alle funzioni.

Diamo un'occhiata a un esempio per vedere come funzionano.

Esempio di utilizzo degli hook di WooPress.

Per il nostro esempio, utilizzeremo un plug-in "Quote of the day", più un'estensione che modifica questo plug-in in un modo specifico. Per seguire e vedere il codice completo, scarica i plugin come file ZIP https://wpshout.com/media/2016/10/plugins.zip.

Il plugin originale

Questo plugin utilizza l'API esposta da una libreria di citazioni esterne e memorizza la citazione risultante come dati temporanei di WordPress che si aggiornano ogni 24 ore. Torna a questo articolo in qualsiasi momento e vedrai una citazione casuale di questo giorno sull'argomento "vita", che dovrebbe essere abbastanza ampia.

estensione plugin

Come sappiamo, il problema con la maggior parte delle citazioni è che non sono dette da "Carl Sagan". La nostra estensione risolve questo problema, utilizzando una serie di strumenti:

  • Una grande carta intestata che mostra la data odierna e la citazione è di Carl Sagan,
  • Alcune sostituzioni di parole specifiche per trasformare una citazione in ciò che Carl Sagan avrebbe potuto dire
  • Gli autori delle citazioni originali vengono modificati e le citazioni sono ora correttamente attribuite a Carl Sagan.

Ecco il plugin e l'estensione, in azione:

citation-in-action

Le code

Affinché ciò avvenga, sono necessari due passaggi:

Il plugin originale definisce gli hook - hook di azione e hook di filtro - consentendo al codice esterno di modificare o aggiungere il proprio codice nei punti chiave. Il plugin utilizza apply_filters () e do_action () per ottenere ciò.

L'estensione definisce le funzioni di hook sull'azione e sui filtri, che modificano il plugin originale in modo necessario.

Codice chiave nel plugin originale

La parte più importante del codice per noi è ciò che facciamo dopo aver ottenuto i nostri dati dall'API. Questi dati sono disponibili come un array con due elementi: testo: il testo della citazione; e autore: la persona che ha detto la citazione. Il nostro codice sarà quindi simile a questo:

add_shortcode ('extensible_plugin_demo', 'bpc_output_extensible_plugin'); funzione bpc_output_extensible_plugin () {ob_start (); // Hook before display! do_action ('bpc_before_get_qod_text'); $ qod_data = bpc_get_qod_data (); if (is_array ($ qod_data)) {echo ' '; $ qod_text = $ qod_data ["testo"]; $ qod_author = $ qod_data ["autore"]; // Filtra il contenuto! $ qod_text = apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = apply_filters ('bpc_qod_author', $ qod_author); echo $ qod_text; eco ' '; echo $ qod_author; eco ' '; } // Action hook dopo il resto dell'output! do_action ('bpc_after_get_qod_text'); return ob_get_clean (); }

Codice chiave nell'estensione

Il plugin non consiste in nient'altro che azioni e filtri per modificare il plugin originale. Ecco il codice per l'estensione:

add_filter( 'bpc_qod_text', 'bpc_filter_qod_text' );
// Filter: remplacer des mots spécifique
function bpc_filter_qod_text( $text ) {
    $text = str_replace( 
        array( ' I ', ' me ', ' the ', ' is ', ' am ', ' are ' ),
        array( ' I, a descendent of savannah-dwelling hominids that somehow evolved an astounding capacity for self-reflection, ', ' the cooled-off stellar matter I call "me" ', ' the trillions of atoms that make up the ', ' seems, without the mind-boggling perspective of quantum physics, to be ', ' cannot, due to the Heisenberg Uncertainty Principle, be determined not to be ', ' appear to our best scientific instruments to be ' ),
        $text
    );
    return $text;
}

// Filter: barré le texte qui précède le nom de l'auteur et ajouter Carl Sagan à la suite
add_filter( 'bpc_qod_author', 'wpshout_filter_qod_author' );
function wpshout_filter_qod_author( $text ) {
    $text = '<strike>' . $text . '</strike> Carl Sagan';
    return $text;
}

// Action: Ajouter un titre
add_action( 'bpc_before_get_qod_text', 'bpc_set_up_quote' );
function wpshout_set_up_quote() {
    echo '<h4>Carl Sagan Quote of the Day for ' . date( 'F j, Y') . ':</h4>';
}

// Action: Ajouter une image
add_action( 'bpc_after_get_qod_text', 'bpc_add_carl_boom' );
function bpc_add_carl_boom() {

    echo '<div><img class="aligncenter" src="' . plugin_dir_url( __FILE__ ) . 'carl_sagan_mind_blown.gif"></div>';
}

Come puoi vedere, questi sono usi abbastanza standard di " add_action () "E" add_filter () "Ed entrambe le funzioni sono agganciate su parentesi quadre che abbiamo chiamato" bpc_qod_text ".

Il risultato finale è che il nostro plugin è ora estensibile: un secondo sviluppatore può guardare modificare il plugin e dire "Vorrei che Carl Sagan dice », E fallo usando il plugin originale come base, proprio come i temi genitore e figlio su WordPress.

Questo è un trucco che rende un plugin come WooCommerce, molto popolare, che consente di aggiungere nuove funzionalità.

Questo è tutto per questo tutorial. Spero che tu capisca meglio i diversi casi d'uso di filtri e azioni di WordPress.