Problème de compréhension apply_filters ()

16

Dans apply_filters ()

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

J'ai du mal à comprendre les $value et $var . J'ai lu le codex et il semble que le $value puisse être modifié, le $var pas, mais je n'ai trouvé aucun exemple de cela dans la nature. Il semble être utilisé comme un moyen de passer une variable. Dans quel cas, quelle est la différence entre cela et le $var ?

    
posée r00tAcc3ss 26.04.2013 - 16:40
la source

2 réponses

32

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

Ainsi, lorsque cette fonction est appelée en tant que:

// 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 obtenez deux variables passées à 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 et non pour les changer.

    
réponse donnée fuxia 26.04.2013 - 16:54
la source
10

Que sont les filtres?

  Les

Filtres sont des fonctions par lesquelles WordPress transmet des données, à certains moments de son exécution, juste avant de passer à une action quelconque sur 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 certains filtres par défaut et votre plugin peut ajouter son propre filtrage.

Connexion à un filtre

Afin de permettre aux utilisateurs de modifier certaines données spécifiques (une valeur, la sortie d'une fonction, etc.), des crochets de filtre sont fournis via les fonctions apply_filters .
Ces crochets de filtre incluent le nom (ou la balise ) du filtre et au moins le nom de la fonction à utiliser pour filtrer (c.-à-d. Modifier d'une manière ou d'une autre) les données. .

Pour modifier le titre d'un article, vous pouvez utiliser the_title crochet de filtre, 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 $title correspond aux données à modifier (le titre du message) et le second paramètre $id est une information supplémentaire dans ce cas, l'identifiant du post).

Pour afficher le titre de chaque message dans UPPERCASE, par exemple, vous pouvez utiliser la ligne suivante:

add_filter('the_title', 'strtoupper');

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

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

Nous avons uniquement spécifié les premier et deuxième paramètres (obligatoires), tandis que les troisième et quatrième paramètres sont réglés sur leur valeur par défaut respective ( 10 et 1 ).

Un filtre plus complexe

Si vous souhaitez filtrer uniquement un certain message , 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 (ce qui est 2 dans ce cas), et pour ce faire, vous devez spécifier le paramètre priority (qui précède le nombre d'arguments).

Supposons que nous ne voulions affecter que le titre du message portant l'ID 42. Il se présente alors comme suit:

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 sont les paramètres que j'ai?

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

Références :

réponse donnée tfrommen 26.04.2013 - 17:27
la source

Lire d'autres questions sur les étiquettes