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

8

Quelle est la première action possible à laquelle je peux me connecter où je pourrai accéder aux $post/$postsvariables globales à la fois sur le front et le back-end? J'ai essayé de regarder à travers la référence du Codex , la référence d'Adam Brown et écrémage par la source à plusieurs reprises , mais ne l' ai pas eu beaucoup de chance de trouver un bon.

pre_get_postsest trop tôt; L'utilisation posts_selectionne fonctionne pas si vous souhaitez effectuer un deuxième appel get_posts () pendant le rappel; et template_redirectne fonctionne pas du côté administrateur. the_postpeut être plus tôt que template_redirectpour le front-end, mais il ne fonctionne pas non plus sur le back-end. Idéalement, je voudrais quelque chose qui fonctionne juste avant les get_post()/get_posts()retours, mais je ne vois rien de tel.

J'ai utilisé le the_postsfiltre dans le passé, mais je préférerais une action car c'est plus techniquement correct.

En ce moment, je me connecte juste deux fois; une fois en utilisant template_redirectpour l'extrémité avant, et à nouveau en utilisant admin_xml_nspour l'extrémité arrière. Je n'aime pas vraiment ça, cependant, car la logique my n'est pas sémantiquement liée à l'un de ces crochets, et il semble que ce soit un besoin très courant et il devrait y avoir un crochet comme "post_get_posts" (ala pre_get_posts) qui fonctionne sur les deux côtés.

Ian Dunn
la source

Réponses:

12

Pour toutes les pages d'administration et les pages frontales, à l'exception des écrans de modification de publication individuels ( wp-admin/post.php), 'wp'est le crochet 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 y voir qu'il se déclenche immédiatement après les WP::main()incendies WP::register_globals(). Le problème avec l'utilisation de choses comme post_resultset get_postsc'est qu'il s'exécute à chaque fois que vous effectuez une requête pour des publications. 'wp'ne se déclenche que dans la fonction WP::main(), qui est 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 crochet que vous pouvez utiliser de manière fiable serait 'add_meta_boxes'. Vous auriez juste besoin de vous assurer que vous êtes sur une page principale lorsque vous vous connectez, bien qu'il passe l' $postobjet global comme deuxième argument (le premier étant celui $post_typede la publication actuelle).

John P Bloch
la source
4

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

Milo
la source