Comprensione dei problemi apply_filters ()


19

In apply_filters ()

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

Sto avendo problemi ad avvolgere la testa attorno al $valuee $var. Ho letto il codice e sembra che $valuenon sia possibile modificarlo $var, ma non ho trovato alcun esempio di questo in natura. Sembra essere usato come un modo per passare una variabile. In tal caso, qual è la differenza tra quello e il $var?

Risposte:


35

Prova a vedere la funzione con nomi migliori:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

Quindi quando quella funzione viene chiamata come:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

Puoi usare …

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

... e ottiene due variabili passate a quella funzione. Restituisci il primo, il secondo 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 sono lì per semplificare le tue decisioni, non per cambiarle.


Se ho capito bene. Non aggiungo una variabile per raccogliere il valore restituito da apply_filters poiché viene applicato automaticamente a $ value_to_change?
r00tAcc3ss,

@ r00tAcc3ss Non succede nulla automaticamente. Devi cambiare il valore nel tuo callback. Se lo desideri, puoi anche restituirlo invariato, a seconda del contesto.
fuxia

O si. Volevo dire, non devo accettare il valore restituito in un'altra variabile e assegnarlo a $ value. Ciò viene fatto, se cambio $ value nella funzione hook e restituito "automaticamente".
r00tAcc3ss,

11

Cosa sono i filtri?

I filtri sono funzioni attraverso le quali WordPress trasmette i dati, in determinati punti dell'esecuzione, appena prima di intraprendere qualche azione con i dati (come aggiungerli al database o inviarli alla schermata del browser). I filtri si trovano tra il database e il browser (quando WordPress genera pagine) e tra il browser e il database (quando WordPress aggiunge nuovi post e commenti al database); la maggior parte dell'input e dell'output in WordPress passa attraverso almeno un filtro. WordPress esegue alcuni filtri per impostazione predefinita e il plug-in può aggiungere il proprio filtro.

Collegarsi a un filtro

Per consentire agli utenti di modificare alcuni dati specifici (un valore, l'output di una funzione, ecc.), Gli hook di filtro sono forniti tramite apply_filtersfunzioni.
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 utilizzare l' the_titlehook del filtro, che è definito come segue:

apply_filters( 'the_title', $title, $id );

Ciò significa che il filtro ha il tag / nome the_title, il primo parametro $titlesono i dati che devono essere modificati (cioè il titolo del post) e il secondo parametro $idsono informazioni extra (in questo caso l'ID del post).

Per visualizzare il titolo di ogni post in MAIUSCOLO, ad esempio, è possibile utilizzare la seguente riga:

add_filter('the_title', 'strtoupper');

Se diamo un'occhiata alla add_filterfunzione, vediamo che è definita come segue:

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Abbiamo specificato solo il primo e il secondo parametro (obbligatorio), mentre il terzo e il quarto parametro sono impostati sul rispettivo valore predefinito (ovvero, 10e 1).

Un filtro più complesso

Se vuoi filtrare solo un determinato post , puoi usare le informazioni extra (nel caso di questo filtro: l'ID). Per fare ciò, devi specificare il numero di parametri (che è 2 in questo caso), e per farlo di nuovo, devi specificare il parametro di priorità (che precede il numero di argomenti).

Supponiamo di voler influenzare solo il titolo del post con l'ID 42, quindi appare 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?

Per identificare il (numero di) parametri disponibili di un determinato filtro, devi cercare dove è definito (in questo caso: qui ).


Riferimenti :


2
+1 per una risposta approfondita e classe impeccabile (bel brochacho di formattazione)!
bosco,

Grazie, è molto approfondito, ma non spiega davvero cosa stavo chiedendo. per esempio. la differenza tra la variabile $ value e la variabile $ var nel filtro.
r00tAcc3ss,

Hm, direi di sì, ma questo è, ovviamente, il mio sentimento soggettivo. Aggiungerò alcune informazioni sul filtro e sui suoi parametri, però.
martedì
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.