Spiegazione per la funzione apply_filters e le sue variabili


16

Sto imparando come creare moduli html usando PHP prendendo un esempio dal plugin "semplicr form registration".

Sto guardando questo codice:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Potete per favore spiegare cosa sta succedendo qui - che cosa fa la funzione, perché è necessario "istruzioni semplic-reg" e "simplr-reg"?

Perché questa linea non può essere semplicemente:

$form .= 'Please fill out this form to sign up for this site' ;

Ho letto il riferimento della funzione ma non riesco ancora a capirlo.

Risposte:


22

Quella riga utilizza due diverse funzioni che richiedono due spiegazioni separate.

__ ()

Questa è una funzione di traduzione. Se le impostazioni sono eseguite correttamente, tradurrà il primo parametro da un elenco di stringhe pre-tradotte. Se un'installazione ha un file con una traduzione compilata da utilizzare per questa funzione, la utilizzerà. Naturalmente, il plugin deve impacchettare la propria traduzione, da cui il secondo parametro. simplr-regdice __()che la traduzione della stringa 'Please fill out this form to sign up for this site'dovrebbe essere nel file di traduzione associato 'simplr-reg'(ciò viene fatto in precedenza nel plugin tramite ilload_plugin_textdomain() funzione).

La funzione quindi restituisce la traduzione. Se non ci sono traduzioni da restituire (ad es. La lingua corrente non ha una traduzione compilata, la stringa non ha una traduzione compilata per quel pacchetto, ecc.), Viene restituito l'input originale.

Quindi per un sito WordPress in inglese, __( 'This', 'simplr-reg' )è funzionalmente uguale a 'This'. Per saperne di più su l10n (Localizzazione), leggilo nel codice:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

Questa funzione consente di filtrare i valori utilizzati dal plug-in in base alle esigenze. Questo è uno dei concetti principali da comprendere come sviluppatore di plugin. WordPress è esteso tramite hook, che sono fondamentalmente punti di accesso che consentono di programmare l'esecuzione delle azioni del plug-in e / o manipolare informazioni / dati utilizzati da WordPress, ecc.

Per manipolare dati come lo snippet di codice di cui hai chiesto, devi usare la funzione add_filter(). Ecco un esempio di base di come funziona:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Probabilmente riconoscerai il primo argomento lì. È lo stesso usato add_filtersopra. Questo è il nome hook. Il secondo argomento è il callback del filtro. Deve essere un callback valido per una funzione ( leggi di più sui callback qui ). Quella riga di codice dice "Quando 'simplr-reg-instructions'viene eseguito l' hook, esegui la funzione con il callback che ho fornito." apply_filters()esegue l'hook trovato nel suo primo argomento, significando essenzialmente "esegui tutte le funzioni registrate per questo hook". apply_filtersquindi passa tutti gli altri argomenti (in questo caso 'Please fill out this form to sign up for this site') alle funzioni su quel filtro. Quindi, il callback che ho usato sopra dovrebbe assomigliare a questo:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

Esistono due tipi di hook in WordPress: i filtri (il tipo che stiamo usando qui) e le azioni. La differenza principale tra i due è che i filtri si aspettano che tu restituisca qualcosa e le azioni no. Quindi, per questo filtro, il mio esempio sopra aggiunge qualche HTML in giro 'Please fill out this form to sign up for this site'e lo restituisce.

Maggiori informazioni su azioni e hook qui:

http://codex.wordpress.org/Plugin_API


John, grazie mille. Bella risposta! Ma non riesco a trovare nemmeno una riga "add_filter ('simplr-reg-istruzioni', ..." nei file del plugin. Come può essere eseguito apply_filter di?
Ash

1
Se non ci sono filtri aggiunti a un hook, restituisce semplicemente l'input originale. Il filtro non è lì per il plugin da usare, è lì per te essere in grado di usare se ne hai bisogno / vuoi in modo da non dover modificare il plugin stesso.
John P Bloch,

+1 Spiegazione eccellente - Legge come dovrebbe fare Docs ;-)
Eddie B

+1 Ottima risposta, esattamente quello che stavo cercando, stavo diventando estremamente confuso, ma ora tutto è così chiaro;)
doz87

5

Hai due diverse funzioni qui apply_filterse__()

La funzione apply_filters è il modo in cui WordPress ti consente di cambiare / modificare il valore delle variabili usando le tue funzioni di callback e la add_filterfunzione. accetta molti argomenti ma quelli importanti sono i primi due:

$something = apply_filters( $tag, $value, $var ... );

$ tag è il nome dell'hook del filtro utilizzato ad add_filteres.

add_filter($tag,callback_function);

$ value è il valore effettivo che sarai in grado di cambiare o modificare.

$ var sono variabili che possono essere utilizzate dalla funzione di callback, una o più.

__() La funzione viene utilizzata per le traduzioni:

__($message,$text_domain);

$ message è il messaggio reale da tradurre.

$ text_domain è il tag del dominio di testo utilizzato per caricare il plugin o la traduzione del tema con load_plugin_textdomain()

cosa fa?

Cerca nel modulo di localizzazione la traduzione di $ message e passa la traduzione all'istruzione return PHP. Se non viene trovata alcuna traduzione per $ message, restituisce solo $ message.

Quindi ora le due funzioni nel tuo caso funzionano allo stesso modo, apply_filters invierà a qualsiasi funzione di callback associata al simplr-reg-instructionshook del filtro il valore tradotto (se esiste) di "Compila questo modulo per iscriverti a questo sito" usando il testo- dominio disimplr-reg


Bainternet, grazie mille! Come mai non riesco a trovare alcuna riga "add_filter ('simplr-reg-istruzioni'," nei file del plugin?
Ash

È un gancio lasciato per gli sviluppatori che vogliono estendere o filtrare la funzionalità dei plugin.
Bainternet,

Quindi add_filter non è previsto qui? Non capisco perché. Apply_filters non dovrebbe eseguire tutte le funzioni associate al suo hook dalle funzioni add_filter?
Ash,

apply_filtersè un add_filtersegnaposto che ti consente di agganciare le tue funzioni usando , quindi nessun add_filter non è previsto a meno che tu non ne aggiunga uno tuo
Bainternet
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.