Difficulté à comprendre apply_filters ()


19

Dans apply_filters ()

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

J'ai du mal à enrouler ma tête autour du $valueet $var. J'ai lu le codex et il semble que le $valuepeut être modifié, $varnon, mais je n'en ai trouvé aucun exemple dans la nature. Il semble être utilisé comme moyen de passer une variable. Dans ce cas, quelle est la différence entre cela et le $var?

Réponses:


35

Essayez de voir la fonction avec de meilleurs noms:

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
);

Donc, lorsque cette fonction est appelée comme:

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

Vous pouvez utiliser …

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

… Et faites passer deux variables à cette fonction. Vous retournez le premier, le second fournit juste plus de contexte:

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

Les variables supplémentaires sont là pour faciliter vos décisions, pas pour les changer aussi.


Si je comprends bien. Je n'ajoute pas de variable pour collecter la valeur renvoyée par apply_filters car elle est appliquée automatiquement à $ value_to_change?
r00tAcc3ss

@ r00tAcc3ss Rien ne se produit automatiquement. Vous devez modifier la valeur de votre rappel. Vous pouvez également le retourner tel quel si vous le souhaitez - selon le contexte.
fuxia

Oh oui. Je voulais dire, je n'ai pas à accepter la valeur retournée dans une autre variable et à l'affecter à $ value. Cela se fait, si je change $ value dans la fonction hookée et que je retourne "automatiquement".
r00tAcc3ss

11

Que sont les filtres?

Les filtres sont des fonctions par lesquelles WordPress transmet les données, à certains moments de l'exécution, juste avant de prendre des mesures avec les données (comme les ajouter à la base de données ou les envoyer à l'écran du navigateur). Les filtres se situent entre la base de données et le navigateur (lorsque WordPress génère des pages), et entre le navigateur et la base de données (lorsque WordPress ajoute de nouveaux messages et commentaires à la base de données); la plupart des entrées et sorties dans WordPress passent par au moins un filtre. WordPress effectue un filtrage par défaut, et votre plugin peut ajouter son propre filtrage.

Accrocher dans un filtre

Afin de permettre aux utilisateurs de modifier certaines données spécifiques (une valeur, la sortie d'une fonction, etc.), les crochets de filtre sont fournis via des apply_filtersfonctions.
Ces crochets de filtre incluent le nom (ou la balise ) du filtre et au moins le nom de la fonction qui doit être utilisé pour filtrer (c'est-à-dire modifier d'une certaine manière) les données.

Pour modifier le titre d'une publication, vous pouvez utiliser le the_titlecrochet de filtre, qui est défini comme suit:

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

Cela signifie que le filtre a la balise / le nom the_title, le premier paramètre $titleest les données qui doivent être modifiées (c'est-à-dire le titre du message) et le deuxième paramètre $idest une information supplémentaire (dans ce cas, l'ID du message).

Pour afficher le titre de chaque publication en MAJUSCULE, par exemple, vous pouvez utiliser la ligne suivante:

add_filter('the_title', 'strtoupper');

Si nous examinons la add_filterfonction, nous voyons qu'elle est définie comme suit:

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

Nous n'avons spécifié que le premier et le deuxième paramètre (requis), tandis que les troisième et quatrième paramètres sont définis sur leur valeur par défaut respective (c'est-à-dire, 10et 1).

Un filtre plus complexe

Si vous souhaitez filtrer uniquement une certaine publication , vous pouvez utiliser les informations supplémentaires (dans le cas de ce filtre: l'ID). Pour ce faire, vous devez spécifier le nombre de paramètres (qui est 2 dans ce cas), et pour recommencer, vous devez spécifier le paramètre de priorité (qui précède le nombre d'arguments).

Supposons que nous voulons affecter uniquement le titre du message avec l'ID 42, alors cela ressemble à ceci:

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

Dans ce cas, nous devons spécifier les quatre paramètres disponibles.

Quels paramètres ai-je?

Pour identifier le (nombre de) paramètres disponibles d'un certain filtre, vous devez rechercher où il est défini (dans ce cas: ici ).


Références :


2
+1 pour une réponse approfondie et une classe impeccable (joli brochacho de mise en forme)!
bosco

Merci, c'est très complet, mais cela n'explique pas vraiment ce que je demandais. par exemple. la différence entre la variable $ value et la variable $ var dans le filtre.
r00tAcc3ss

Hm, je dirais que oui, mais c'est, bien sûr, mon sentiment subjectif. J'ajouterai cependant quelques informations sur le filtre et ses paramètres.
tfrommen
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.