web-dev-qa-db-fra.com

Premier crochet pour obtenir de manière fiable $ post/$ posts

Quelle est l'action la plus précoce possible à laquelle je peux m'attacher pour pouvoir accéder aux variables globales $post/$posts à l'avant et à l'arrière? J'ai essayé de parcourir la référence du Codex , la référence d'Adam Brown et de parcourir la source à plusieurs reprises, mais je n'ai pas eu beaucoup de chance d'en trouver une bonne.

pre_get_posts est trop tôt; L'utilisation de posts_selection ne fonctionne pas si vous souhaitez effectuer un deuxième appel à get_posts () pendant le rappel; et template_redirect ne fonctionne pas du côté de l’administrateur. the_post est peut-être antérieur à template_redirect pour le serveur principal, mais il ne s'exécute pas non plus sur le serveur principal. Idéalement, j'aimerais que quelque chose fonctionne juste avant le retour de get_post()/get_posts(), mais je ne vois rien de tel.

J'ai déjà utilisé le filtre the_posts, mais je préférerais une action car elle est plus correcte techniquement.

En ce moment, je suis juste accroché deux fois; une fois en utilisant template_redirect pour le frontal, et encore en utilisant admin_xml_ns pour le back-end. Je n'aime pas vraiment cela, cependant, puisque ma logique n'est pas sémantiquement liée à l'un de ces crochets, et il semble que ce soit un besoin très courant et qu'il devrait y avoir un crochet comme "post_get_posts" (ala pre_get_posts) qui fonctionne des deux côtés.

8
Ian Dunn

Pour toutes les pages d'administration et les pages frontales, à l'exception des écrans de post-édition individuels (wp-admin/post.php), 'wp' est le hook le plus fiable pour obtenir les valeurs globales.

http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-includes/class-wp.php.source.html#l486

Vous pouvez voir qu'il se déclenche immédiatement après que WP::main() ait déclenché WP::register_globals(). Le problème avec l'utilisation d'éléments tels que post_results et get_posts est qu'il s'exécutera chaque fois que vous effectuez une requête pour des publications. 'wp' ne se déclenche que dans la fonction WP::main(), ce que WP core utilise pour exécuter la requête principale de la page.

Pour les écrans de post-édition, il semble que le premier hook que vous pouvez utiliser de manière fiable serait 'add_meta_boxes'. Vous devez simplement vous assurer que vous êtes sur une page principale lorsque vous vous connectez, bien que l'objet global $post soit le deuxième argument (le premier étant le $post_type de la publication en cours).

12
John P Bloch

posts_results est le filtre sur le résultat de la requête brute. voir la ligne 2627 dans wp-includes/query.php.

4
Milo