Diferența dintre add_filter și apply_filters

30 ian. 2014, 12:52:11
Vizualizări: 34.8K
Voturi: 25

Am căutat o explicație potrivită despre diferența dintre add_filter() și apply_filters() aici dar nu am găsit una.

Poate cineva să-mi spună ce informații sau logică trebuie să iau în considerare înainte de a folosi add_filter sau apply_filters într-un anumit context.

Ce face ca utilizarea uneia să fie imperativă și nu a celeilalte?

  • Este corect că add_filter doar adaugă o funcție în coada funcțiilor care așteaptă să fie executate pe o variabilă și apply_filters execută funcțiile în ordine?

  • Este de asemenea corect că apply_filters când este apelat cu un argument (numele funcției care trebuie rulată) va executa acea funcție înaintea tuturor celorlalte (dacă există) din coadă?

3
Comentarii

Ce anume din documentația existentă aici și aici nu explică suficient de bine pentru tine?

t31os t31os
30 ian. 2014 13:01:40

Cred că aceasta este de fapt o întrebare bună. Ca dezvoltator nou în WordPress, acest concept poate fi confuz.

Shawn Shawn
29 sept. 2014 21:00:59

Toți am fost începători la un moment dat.

Scott C Wilson Scott C Wilson
6 oct. 2024 19:21:33
Toate răspunsurile la întrebare 2
1
33

Majoritatea următoarelor informații pot fi găsite în Codex:


apply_filters

Funcțiile de callback atașate la cârligul de filtrare $tag sunt invocate prin apelarea acestei funcții. Această funcție poate fi utilizată pentru a crea un nou cârlig de filtrare prin simplul apel al acestei funcții cu numele noului cârlig specificat folosind parametrul $tag.

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );

În esență:
Folosești apply_filters pentru a filtra o anumită $value - în raport cu valoarea în sine precum și cu variabilele opționale furnizate $var_1 până la $var_n.


add_filter

Atașează o funcție la o acțiune de filtrare specifică.

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

În esență:
Folosești add_filter pentru a atașa o funcție personalizată la acțiunea de filtrare dată ($tag), pe care ai fi putut-o genera înainte cu apply_filters (sau a fost o acțiune de filtrare integrată sau provine dintr-un plugin/tema ta).


Deci, iată un exemplu fictiv:

function print_initials( $name ) {

    if ( ! is_string( $name ) ) {
        return;
    }

    $fragments = explode( ' ', $name );

    /**
     * Filtrează dacă să afișeze inițialele în ordine inversă.
     *
     * @param bool $reverse Afișează inițialele în ordine inversă?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

    foreach ( $fragments as $f ) {
        echo substr( $f, 0, 1 );
    }
}

print_initials( 'Some Guy' ); // afișează: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // afișează: GS

Acum, dacă apelăm funcția noastră așa cum este, inițialele sunt afișate de la stânga la dreapta—pentru că asta am definit ca comportament implicit.

A doua oară, obținem inițialele în ordine inversă—deoarece funcția de filtrare __return_true, care este atașată la acțiunea noastră de filtrare, întoarce întotdeauna TRUE și astfel face ca inițialele să fie afișate de la dreapta la stânga.

30 ian. 2014 13:03:54
Comentarii

Acesta este un răspuns excelent și arată cum poți suprascrie filtrele. Mulțumesc.

Shawn Shawn
29 sept. 2014 21:01:47
1

Exemplul de mai sus este exemplul clasic care îi omoară pe dezvoltatorii începători.. Explicat într-un mod dur, dar prietenos pentru oameni, poți folosi apply_filters pentru a crea un filtru personalizat specific pe care îl poți modifica ulterior prin add_filter. Pe de altă parte, dacă folosești un hook deja existent, poți folosi direct add_filter.. Logica este tipica non-logică a dezvoltării, așa că trebuie să cauți mai multe exemple și să exersezi puțin pentru a "înțelege" cum funcționează.. Știu că chiar și explicația mea poate să nu sune complet clară, (și majoritatea colegilor noștri ar putea să mă omoare pentru inexactități) dar mie mi se pare cea mai ușor de înțeles explicație pe care am găsit-o pe Internet..

23 apr. 2023 10:25:11
Comentarii

Acest lucru nu oferă un răspuns la întrebare. Când vei avea suficientă reputație vei putea comenta pe orice postare; în schimb, oferă răspunsuri care nu necesită clarificări din partea întrebătorului. - Din Recenzie

cjbj cjbj
26 apr. 2023 12:25:48