Difficoltà a comprendere apply_filters()
In apply_filters()
apply_filters( $tag, $value, $var ... );
Ho difficoltà a comprendere appieno $value
e $var
. Ho letto il codex e sembra che $value
possa essere modificato, mentre $var
no, ma non ho trovato esempi concreti di questo comportamento. Sembra essere utilizzato come un modo per passare una variabile. In tal caso, qual è la differenza tra questo e il $var
?
Prova a vedere la funzione con nomi migliori:
apply_filters(
$filter_name, // usato per add_filter( $filter_name, 'callback' );
$value_to_change, // l'unica variabile il cui valore puoi modificare
$context_1, // contesto
$context_2 // ulteriore contesto
);
Quindi quando quella funzione viene chiamata come:
// wp-login.php riga 94
apply_filters( 'login_body_class', $classes, $action );
Puoi usare...
add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );
... e ottenere due variabili passate a quella funzione. Restituisci la prima, la seconda fornisce solo più contesto:
function function_to_change_login_body_class( $classes, $action )
{
if ( 'login' === $action )
$classes[] = 'foo';
if ( 'postpass' === $action )
$classes[] = 'bar';
return $classes;
}
Le variabili aggiuntive servono per rendere le tue decisioni più facili, non per modificarle anche quelle.

Se ho capito bene, non devo aggiungere una variabile per raccogliere il valore restituito da apply_filters perché viene applicato automaticamente a $value_to_change?

@r00tAcc3ss Nulla avviene automaticamente. Devi modificare il valore nella tua callback. Puoi anche restituirlo invariato se vuoi - dipende dal contesto.

Cosa sono i Filtri?
I filtri sono funzioni attraverso le quali WordPress fa passare i dati, in determinati momenti dell'esecuzione, appena prima di compiere qualche azione con i dati (come aggiungerli al database o inviarli allo schermo del browser). I filtri si trovano tra il database e il browser (quando WordPress sta generando le pagine), e tra il browser e il database (quando WordPress aggiunge nuovi post e commenti al database); la maggior parte degli input e output in WordPress passa attraverso almeno un filtro. WordPress applica alcuni filtri di default, e il tuo plugin può aggiungere i propri filtri.
Agganciarsi a un Filtro
Per permettere agli utenti di modificare alcuni dati specifici (un valore, l'output di una funzione, ecc.), vengono forniti degli hook di filtro tramite le funzioni apply_filters
.
Questi hook di filtro includono il nome (o tag) del filtro e almeno il nome della funzione che deve essere usata per filtrare (cioè alterare in qualche modo) i dati.
Per modificare il titolo di un post, puoi usare l'hook di filtro the_title
, definito come segue:
apply_filters( 'the_title', $title, $id );
Questo significa che il filtro ha il tag/nome the_title
, il primo parametro $title
sono i dati che devono essere cambiati (cioè il titolo del post) e il secondo parametro $id
sono informazioni extra (in questo caso l'ID del post).
Per visualizzare il titolo di ogni post in MAIUSCOLO, per esempio, puoi usare la seguente riga:
add_filter('the_title', 'strtoupper');
Se diamo un'occhiata alla funzione add_filter
, vediamo che è definita così:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Abbiamo specificato solo il primo e il secondo parametro (obbligatori), mentre il terzo e il quarto parametro sono impostati ai rispettivi valori di default (cioè 10
e 1
).
Un Filtro Più Complesso
Se vuoi filtrare solo un determinato post, puoi usare le informazioni extra (in questo caso del filtro: l'ID). Per farlo, devi specificare il numero di parametri (che in questo caso è 2), e per fare questo ancora, devi specificare il parametro di priorità (che viene prima del numero di argomenti).
Supponiamo di voler influenzare solo il titolo del post con ID 42, allora sarebbe così:
add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
if (42 === $id) return strtoupper($title);
return $title;
} // function my_strtoupper
In questo caso, dobbiamo specificare tutti e quattro i parametri disponibili.
Quali Parametri Ho a Disposizione?
Per identificare il numero di parametri disponibili per un certo filtro, devi cercare dove è definito (in questo caso: qui).
Riferimenti:

+1 per una risposta approfondita e una classe impeccabile (ottima formattazione, brochacho)!

Grazie, è molto dettagliato, ma non spiega realmente quello che chiedevo. Ad esempio, la differenza tra la variabile $value e la variabile $var nel filtro.
