web-dev-qa-db-fra.com

Utilisation de get_terms pour la taxonomie personnalisée dans functions.php

J'essaie de récupérer les noms des éléments de taxonomie et de les inclure dans un panneau d'administration de thème.

 function retrieve_my_terms () {
 
 global $ terms; 
 
 $ terms = get_terms ('taxonomie'); 
 
 foreach ($ terms as $ term) {
 $ option = $ term-> nom; 
 return $ option; 
} 
} 

La fonction est ajoutée après les fonctions qui ont créé le type de publication et la taxonomie personnalisés.

D'après ce que j'ai découvert, il semble que l'action init se produise une fois que le fichier functions.php du thème a été inclus. Par conséquent, si je recherche des termes directement dans le fichier de fonctions, je le fais avant même été enregistré.

En d'autres termes, l'action init ne se déclenche qu'après que le fichier de fonctions de thème a été inclus. Par conséquent, toute récupération de terme doit avoir lieu après init.

Mon problème est que je ne sais pas comment récupérer les termes après l'init.

Toute réponse sera très appréciée!

Je vous remercie! Madalin

2
Madalin

Vous pouvez ajouter l'action sur l'init lui-même, il suffit d'augmenter la priorité de l'appel add_action. Plus la priorité est élevée, plus tard la fonction est appelée.

add_action('init', 'retrieve_my_terms', 9999);

Mais je suggère que vous fassiez ce genre de choses le plus tard possible, de préférence juste avant la première utilisation. Il y a une action 'wp_loaded' qui est appelée après le chargement de wordpress complet et prête à commencer à travailler sur la sortie. Cette action pourrait fonctionner pour vous.

1
Mridul Aggarwal

Il est vrai que functions.php est chargé avant init - et que la plupart des types de publication seront enregistrés à l'aide de ce hook. Mais il y a des crochets ultérieurs que vous pouvez utiliser - et qui seront plus appropriés.

Vous dites que vous devez accéder aux termes à l'intérieur de functions.php. Mais quand en avez-vous besoin? init se déclenche à chaque chargement de page - recto et verso - et je ne pense pas que vous souhaitiez récupérer les termes à chaque chargement de page. De nombreux crochets sont à votre disposition et ils sont tous déclenchés dans divers contextes. Si vous nous dites précisément ce que vous voulez faire avec les termes qui détermineront quel hook vous devez utiliser.

(Je suis un peu confus par les inclure dans un panneau d'administrateur de thème ). On dirait que vous essayez peut-être de sortir une liste dans une metabox d’administrateur. Peu importe, pouvez-vous inclure du code?

1
Stephen Harris

Vous pouvez définir votre fonction dans la portée globale de functions.php sans aucun problème.

C'est en utilisant la fonction avant l'enregistrement qui pose problème. Au lieu de faire des choses dans functions.php dans la portée globale, faites-les en crochets. La seule chose dans functions.php qui devrait être autorisée à ne pas être accrochée est l'appel à add_action.

Donc, mettez tout dans les crochets, et faites vos appels dans un crochet/action après l'enregistrement de vos types de message, pas avant en code lâche dans le global

0
Tom J Nowell