Differenza tra add_filter e apply_filters
Ho cercato una spiegazione adeguata della differenza tra add_filter() e apply_filters() qui ma non sono riuscito a trovarne una.
Qualcuno può spiegarmi quali informazioni o logica considerare prima di utilizzare add_filter o apply_filters in un determinato contesto.
Cosa rende l'uso di uno imperativo e non dell'altro?
È corretto che
add_filteraggiunge semplicemente una funzione alla coda delle funzioni in attesa di essere eseguite su una variabile eapply_filtersesegue le funzioni in ordine?È anche corretto che
apply_filtersquando viene chiamato con un argomento (il nome della funzione da eseguire) eseguirà quella funzione prima di tutte le altre (se esistono) nella coda?
La maggior parte di quanto segue può essere trovato nel Codex:
apply_filters
Le funzioni di callback collegate all'hook del filtro
$tagvengono invocate chiamando questa funzione. Questa funzione può essere utilizzata per creare un nuovo hook di filtro semplicemente chiamando questa funzione con il nome del nuovo hook specificato utilizzando il parametro $tag.
$value = apply_filters( $tag, $value, $var_1, $var_2, ... );
In sostanza:
Si utilizza apply_filters per filtrare un dato $value - rispetto al valore stesso e, opzionalmente, alle variabili fornite $var_1 fino a $var_n.
add_filter
Collega una funzione a una specifica azione di filtro.
add_filter( $tag, $function_to_add, $priority, $accepted_args );
In sostanza:
Si utilizza add_filter per collegare una funzione personalizzata all'azione di filtro specificata ($tag), che potrebbe essere stata generata da apply_filters in precedenza (o potrebbe essere un'azione di filtro integrata o provenire da un plugin/il tuo tema).
Ecco un esempio fittizio:
function print_initials( $name ) {
if ( ! is_string( $name ) ) {
return;
}
$fragments = explode( ' ', $name );
/**
* Filtra se stampare le iniziali in ordine inverso.
*
* @param bool $reverse Stampare le iniziali in ordine inverso?
*/
if ( apply_filters( 'reverse_initials', FALSE ) ) {
$fragments = array_reverse( $fragments );
}
foreach ( $fragments as $f ) {
echo substr( $f, 0, 1 );
}
}
print_initials( 'Some Guy' ); // output: SG
add_filter( 'reverse_initials', '__return_true' );
print_initials( 'Some Guy' ); // output: GS
Ora, se chiamiamo la nostra funzione così com'è, le iniziali vengono stampate da sinistra a destra—perché questo è il comportamento predefinito che abbiamo definito.
La seconda volta, otteniamo le iniziali in ordine inverso—perché la funzione di filtro __return_true, collegata alla nostra azione di filtro, restituisce sempre TRUE e quindi fa sì che le iniziali vengano stampate da destra a sinistra.
L'esempio sopra è il classico esempio che manda in confusione un nuovo sviluppatore..
Spiegato in modo rozzo ma comprensibile, puoi usare apply_filters per creare un filtro personalizzato specifico che potrai poi modificare tramite add_filter.
D'altra parte, se usi un hook già esistente, puoi usare direttamente add_filter..
La logica è la tipica non-logica dello sviluppo, quindi devi guardare più esempi e fare pratica per "capire" come funzionano..
So che anche la mia spiegazione potrebbe non essere totalmente chiara (e molti dei nostri colleghi potrebbero uccidermi per l'inesattezza), ma mi sembra la spiegazione più comprensibile che abbia trovato su Internet..
Questa risposta non risponde alla domanda. Una volta che avrai abbastanza reputazione potrai commentare qualsiasi post; invece, fornisci risposte che non richiedano chiarimenti da parte di chi ha fatto la domanda. - Da Review
cjbj