Différence entre add_filter et apply_filters


17

J'ai cherché une explication appropriée de la différence entre add_filter()et apply_filters()ici mais je n'en ai pas trouvé.

Quelqu'un peut-il me dire quelles informations ou logique considérer avant d'utiliser add_filterou apply_filtersdans un contexte.

Cela rend impératif l'utilisation de l'un et non de l'autre?

  • Est-il correct d' add_filterajouter simplement une fonction à la file d'attente de fonctions en attente d'exécution sur une variable et d' apply_filtersexécuter les fonctions dans l'ordre?

  • Est-il également exact que apply_filterslorsqu'il est appelé avec un argument (le nom de la fonction à exécuter) exécutera cette fonction avant toutes les autres (si elles existent) dans la file d'attente?


2
Qu'en est-il de la documentation existante ici et ici ne l'explique pas adéquatement pour vous?
t31os

3
Je pense que c'est en fait une bonne question. En tant que nouveau développeur wordpress, cela peut être un concept déroutant.
Shawn du

Réponses:


26

La plupart des éléments suivants se trouvent dans le Codex :


apply_filters

Les fonctions de rappel attachées au hook de filtre $tagsont appelées en appelant cette fonction. Cette fonction peut être utilisée pour créer un nouveau hook de filtre en appelant simplement cette fonction avec le nom du nouveau hook spécifié à l'aide du paramètre $ tag.

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

Essentiellement:
vous utilisez apply_filterspour filtrer une donnée $value- en ce qui concerne la valeur elle-même ainsi que les variables éventuellement fournies $var_1via $var_n.


add_filter

Accrochez une fonction à une action de filtrage spécifique.

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

Essentiellement:
vous utilisez add_filterpour accrocher une fonction personnalisée à l'action de filtrage donnée ( $tag), que vous avez peut-être générée apply_filtersavant (ou c'était une action de filtrage intégrée ou découle d'un plugin / de votre thème).


Voici donc un exemple fictif :

function print_initials( $name ) {

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

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

    /**
     * Filter wether to print initials in reverse order.
     *
     * @param bool $reverse Print initials in reverse order?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

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

print_initials( 'Some Guy' ); // outputs: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // outputs: GS

Maintenant, si nous appelons simplement notre fonction telle quelle, les initiales sont imprimées de gauche à droite, car c'est ce que nous avons défini comme comportement par défaut.

La deuxième fois, nous obtenons les initiales dans l'ordre inverse, car la fonction de filtrage __return_true, qui est liée à notre action de filtrage, revient toujours TRUEet fait donc sortir les initiales de droite à gauche.


3
Ceci est une excellente réponse et montre comment vous pouvez remplacer les filtres. Merci.
Shawn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.