Comment les filtres et les crochets fonctionnent-ils réellement dans WordPress?
Je demande quelque chose de avancé. Comment est-il implémenté en PHP? Par exemple, comment recueille-t-il tous les crochets des différents plugins et les "attache" aux crochets principaux, etc.
Réponses:
Présentation
Fondamentalement, l '" API de plug-in ", qui appelle des filtres et des crochets, se compose des fonctions suivantes:
apply_filters()
- exécuterdo_action
- exécuterapply_filters_ref_array()
- exécuterdo_action_ref_array()
- exécuteradd_filter()
- ajouter à la pileadd_action()
- ajouter à la pileInternes de base
Globalement, il y a quelques globaux (quoi d'autre dans le monde WordPress) impliqués:
Le premier
$wp_filter
est un globalArray
qui contient tous les noms de filtre en tant que sous-réseaux. Chacun de ces sous-réseaux contient alors encore plus de sous-réseaux qui sont des rappels appelés sous un tableau de priorité.Bref en profondeur
Ainsi, lorsqu'une fonction d' exécution est appelée, WordPress recherche dans ces tableaux globaux les clés portant ce nom. Ensuite, les rappels attachés sont exécutés priorité après priorité. La seule chose qui se produit à l'avant est les rappels attachés au
all
filtre.Lorsque vous ajoutez un rappel à l'aide de
add_action
ouadd_filter
, WordPress calcule d'abord un ID "unique" pour ne pas écraser les rappels déjà joints.Ensuite, il ajoute votre rappel à la
global $wp_filter
pile:Comme vous pouvez le voir, le sous-tableau principal est le
$tag
(ou le nom de l'action / du filtre), puis tout est invoqué sous une priorité spécifique, puis la chaîne de rappel / ID "unique" est utilisée comme clé.Plus tard, lorsqu'un filtre est appelé - avec le nom
$tag
/ action- / filter-name - le tableau est recherché et les rappels sont appelés. Comme il l'utilisecall_user_func_array
, peu importe le nombre d'arguments attachés. WordPress résout cela par lui-même.la source
Les crochets sont inclus à la fois dans les fichiers principaux de WordPress et dans certains fichiers de thèmes parents. Ils vous permettent de connecter du contenu à un emplacement spécifique du fichier.
Un exemple est le crochet wp_head dans WordPress. Vous pouvez utiliser ce crochet dans votre thème enfant pour ajouter du contenu à cet emplacement "
Exemple:
Certains thèmes premium incluent également des crochets d'action que vous pouvez utiliser dans un thème enfant pour faire la même chose. Voici une carte visuelle qui comprend tous les crochets d'action et la position de sortie de votre contenu dans le cadre du thème Genesis.
Exemple:
Voici à quoi ressemble le hook si vous avez ouvert le fichier header.php dans le cadre du thème Genesis:
Voici une liste de crochets WordPress que vous pouvez utiliser de plusieurs façons.
Les filtres vous permettent de modifier la sortie d'une fonction existante et sont inclus à la fois dans les fichiers principaux de WordPress et dans certains cadres de thèmes parents comme Genesis.
Voici une liste des filtres que vous pouvez utiliser avec Genesis Design Framework
Voici une liste des filtres inclus dans WordPress
Voici un exemple de la façon dont vous pouvez utiliser un filtre dans un cadre de thème comme Genesis:
Le code ci-dessus peut être utilisé dans un thème enfant pour modifier l'auteur dit le texte dans vos commentaires. Cela fonctionne dans n'importe quel thème.
Voici un autre exemple qui personnalise la longueur des extraits à 50 mots:
Vous trouverez la fonction the_excerpt () dans le fichier wp-includes / post-template.php.
Voici à quoi ça ressemble:
Vous pouvez également utiliser des crochets et des filtres dans les plugins pour faire exactement la même chose et le code ne sera pas perdu lorsque vous mettrez à jour le thème parent ou WordPress.
Fondamentalement, les crochets et les filtres vous permettent de personnaliser et de modifier à la fois WordPress et votre thème parent sans modifier les fichiers WordPress de base ou vos fichiers de thème parent.
Il est beaucoup plus facile de personnaliser un thème enfant lorsque le cadre de thème parent comprend des crochets et des filtres car vous n'avez jamais besoin de modifier les fichiers de modèle de thèmes parents. De cette façon, vous pouvez également changer les thèmes en toute sécurité.
la source