web-dev-qa-db-fra.com

Clarification sur les filtres et les crochets

Je suis sur le point de démarrer mon premier projet WordPress et j'ai pour tâche de déplacer du code principal personnalisé qui remplace le noyau dans des fonctions/fichiers distincts (de cette manière, il sera plus facile à gérer lors de la prochaine mise à niveau.

J'ai fait des recherches et il semble que add_filter et apply_filter et do_action et add_action semblent être la voie à suivre. Je ne sais toujours pas comment ils fonctionnent. Est-ce que ces méthodes sont ce que j'utilise pour écraser les méthodes de base? Je suis confus parce que add_filter utilise le mot add quand il me semble que c'est plutôt sur les lignes replace ou overwrite (à moins que je ne comprenne mal)

Je viens de lire la première réponse à this (celle sur les tacos)

Donc, l'auteur a utilisé trois étapes pour décrire comment utiliser add_filter:

Étape 1: une valeur statique pour la variable $ taco

<?php $taco = 'chicken'; ?>

Étape 2:

    <?php
    $taco = apply_filters( 'get_taco', 'chicken' );
    ?>

Étape 3:

    <?php
    add_filter( 'get_taco', 'my_special_order' );
    function my_special_order( $content ) {
        return 'shredded beef';
    }
    ?>

Donc, dans cette situation, le apply_filter crée-t-il une méthode dynamique à la volée et lui fait-il renvoyer la chaîne chicken? Ou bien supposez-vous qu’il existe une méthode WordPress principale appelée get_taco et que l’utilisation de apply_filter aiderait à remplacer la fonctionnalité originale?

Aussi, pouvez-vous seulement apply_filter quelque chose que vous avez add_filtered? En d'autres termes, apply_filter('get_taco'); ne fonctionnerait-il pas si je ne définissais pas add_filter('get_taco', 'my_special_order'); AND function my_special_order ($content) ... en premier?

Est-ce que je mets ces filtres dans mon fichier functions.php? Désolé de vous bombarder de questions, je viens de Ruby on Rails, donc je ne connais absolument rien dans WordPress.

7
Edmund

Je suis confus parce que add_filter utilise le mot Word add quand il me semble que c'est plutôt sur les lignes de remplacement ou d'écrasement (à moins que je ne comprenne mal)

Vous êtes mal compris. add_action et add_filter insèrent tous deux des rappels de fonction dans une sorte de file d'attente. Vous pouvez ajouter de nombreux rappels au même hook et ils se déclencheront dans la séquence ajoutée sauf si une priorité est incluse en tant que troisième paramètre.

Donc, dans cette situation, apply_filter crée-t-il simplement une méthode dynamique à la volée et lui permet-il de renvoyer la chaîne de poulet?

apply_filters - notez le 's' - crée plus ou moins le filtre, mais généralement, une variable n'est pas une chaîne, et cette variable est transmise au rappel qui le modifie et le renvoie ensuite.

Les "slugs" de filtres ne sont généralement pas les noms de fonctions ou de méthodes de WordPress Core, même si certaines fonctions ont des filtres du même nom. Par exemple, the_content() appelle le filtre the_content.

Les crochets ne remplacent généralement pas la fonction entière, mais seulement des parties, mais il y a des exceptions et des exceptions proches.

Aussi, pouvez-vous seulement apply_filter quelque chose que vous avez ajouté_filtered?

Non, l'inverse. Vous pouvez uniquement add_filter quelque chose qui est apply_filtered. Vous pouvez utiliser add_filter('whatever','abc'); mais rien ne se passera s'il n'y a pas de apply_filter('whatever',... quelque part.

La même chose s’applique à add_action/do_action mais les actions servent à faire des choses plutôt qu’à renvoyer des valeurs.

Les crochets sont exécutés à différents moments du chargement de la page et à divers endroits des fonctions et des méthodes. Par exemple, save_post est exécuté vers la fin de wp_insert_post alors que pre_get_posts est exécuté près du haut de la méthode get_posts de la classe WP_Query. D'autres s'exécutent dans au milieu du chargement de la page et pas dans une fonction ou une méthode. Ils s'exécutent chaque fois qu'il est nécessaire (comme déterminé par les développeurs) de modifier ou d'ajouter des informations, ou d'exécuter d'autres fonctions, de rediriger une page, etc.

Plus d'information

Différence entre les crochets de filtre et d'action?

7
s_ha_dum

Je suppose que vous vous êtes un peu trompé.

Les filtres et les actions sont des fonctions que vous "attribuez" à des points d'ancrage. Dans de nombreux endroits, WordPress appelle les fonctions do_action ou apply_filter. Le premier paramètre de ces fonctions est le nom du crochet.

Donc, par exemple quand vous voyez

do_action('blabla');

Cela signifie que toutes les actions assignées à "blabla" seront appelées.

add_filter et add_action n'écrase rien. Il fait exactement ce qu'il dit - il attribue votre fonction à un crochet donné.

Ainsi, votre étape 2. applique le filtre get_taco à la valeur statique chicken. Et par filtre, je veux dire, il appelle toutes les fonctions attribuées à get_taco hook.

Votre étape 3. crée une nouvelle fonction my_special_order et l'assigne à get_taco hook. Ainsi, chaque fois qu'il y aura un appel apply_filter('get_taco'), votre fonction sera appelée.

Si aucun filtre/action n'est attribué à un hook donné, rien ne sera fait.

Vous pouvez en savoir plus sur ce sujet ici: http://codex.wordpress.org/Plugin_API

0
Krzysiek Dróżdż