Que fait réellement apply_filters (…) dans WordPress?


123

J'essaie de comprendre certaines des fonctions de WordPress, mais je ne peux pas comprendre ce que fait réellement apply_filters (...) .

Quelqu'un est-il capable de clarifier cela pour moi avec quelques exemples?



Une note qui apply_filters()est un nom incroyablement trompeur pour la fonction car elle applique à la fois des filtres et des actions accrochés à la fonction cible
cameronjonesweb

@NabilKadimi, excellente suggestion, dev.themeblvd.com/tutorial/filters/#highlighter_604585 , mais lorsque cette fonction n'accepte aucun argument (veuillez cliquer sur le lien pour voir de quelle fonction je parle), comment la variable $ output est-elle modifiée , comme il le décrit dans sa prochaine section de code?
Ramesh Pareek

@RameshPareek Votre lien ne semble pas fonctionner comme prévu, veuillez utiliser un gist Github.
Nabil Kadimi

Désolé! Veuillez faire défiler jusqu'à l' exemple 1: les bases sur cette page.
Ramesh Pareek

Réponses:


104

apply_filters($tag, $value)passe l'argument 'value' à chacune des fonctions 'hooked' (using add_filter) dans le filtre spécifié 'tag'. Chaque fonction effectue un certain traitement sur la valeur et renvoie une valeur modifiée à transmettre à la fonction suivante de la séquence.

Par exemple, par défaut (dans WordPress 2.9), le the_contentfiltre transmet la valeur à travers la séquence de fonctions suivante:

  • wptexturize
  • convert_smilies
  • convert_chars
  • wpautop
  • shortcode_unautop
  • prepend_attachment
  • do_shortcode

N'oubliez pas également de faire écho à tout ce dont vous n'utilisez pas la valeur s'il semble que cela apply_filters($value)efface une valeur ...
MrMesees

32

réponse tardive

Brève explication

apply_filters()interagit avec le global $wp_filterstableau. Fondamentalement, il vérifie simplement le tableau si le filtre actuel (ou crochet) a une action (/ fonction de rappel) attachée, puis l'appelle.

Longue explication

Lorsque vous attachez un rappel / une action à un filtre ou à un hook, vous ajoutez simplement le nom du rappel au tableau de filtres global. Quand alors, dans le code (par exemple un fichier de modèle, de noyau ou de plugin) un appel à do_action()ou apply_filters()se produit, WordPress a cherché dans le tableau et appelle le rappel. La seule chose plus spéciale avec les filtres qu'avec les hooks est qu'il renvoie la valeur (pour une gestion ultérieure) au lieu de simplement déclencher le rappel. En résumé: les hooks doivent insérer des données, tandis que les filtres doivent modifier les données.


19

Voici ce que je glane, après avoir examiné la réponse la plus populaire et les ressources supplémentaires:

  • $ tag semble être un synonyme du nom du hook. (Ce n'est pas particulièrement intuitif pour moi.)
  • the_content est un exemple de hook, de type "filter".
  • le hook_content se compose de plusieurs filtres.
  • Les filtres modifient les données. Ils filtrent essentiellement la base de données, modifiant les données avant que les utilisateurs ne les visualisent.
  • Une utilisation courante de apply_filters (), par exemple, consiste à appliquer les filtres the_content à $ content. Dans ce cas, les doubles retours seront convertis en <p>balises, les visages souriants seront convertis en icônes, etc.
  • "the_content" est un hook, tandis que "the_content ()" est une fonction.

1

Dans les termes les plus élémentaires, apply_filters est utilisé pour initialiser un hook de filtre ... add_filter assigne une nouvelle fonction aux hooks qui ont déjà été créés.


3
Désolé, ce n'est pas le bon moyen: apply_filters () appelle les hooks de filtre qui sont déjà initialisés et add_filter () est l'appel qui crée un hook de filtre. Je sais que vous vouliez vraiment dire cela, mais vous avez les fonctions dans le mauvais sens!
Brian C

apply_filters ($ tag, $ valeur); vous permet de créer un emplacement dans votre code où vous pouvez ensuite autoriser la valeur $ que vous passez à être accrochée et modifiée en utilisant add_filter ();
Styledev
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.