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_filter
ed? 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.
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_filter
ed. 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.
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