最早可靠获取$ post / $ posts的钩子


8

我可以钩到最早可以$post/$posts在前端和后端访问全局变量的位置的动作是什么?我尝试遍历Codex参考资料Adam Brown的参考资料,并在源代码中浏览了几次,但运气不好找到一个好的参考资料

pre_get_posts为时过早;posts_selection如果您想在回调期间进行第二次get_posts()调用,则使用无效。并且template_redirect不会在管理员端运行。the_post可能早于template_redirect前端,但也不会在后端运行。理想情况下,我希望某些东西可以在get_post()/get_posts()返回之前运行,但是我看不到任何类似的东西。

我过去曾使用过the_posts过滤器,但我更喜欢使用操作,因为它在技术上更正确。

现在,我只想插话两次;一次template_redirect用于前端,再一次admin_xml_ns用于后端。不过,我并不是很喜欢,因为我的逻辑在语义上与这两个钩子都不相关,并且这似乎是非常普遍的需求,应该有一个像“ post_get_posts”(ala pre_get_posts)这样的钩子可以工作双方。

Answers:


12

对于除个别帖子编辑屏幕(wp-admin/post.php)以外的所有管理页面和前端页面,它'wp'是获取全局值的最可靠钩子。

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

您可以在那里看到火灾后立即WP::main()点火WP::register_globals()。使用诸如post_results和这样的问题get_posts是,它将在您每次查询帖子时运行。'wp'仅在函数中触发WP::main(),这是WP核心用来运行页面的主请求查询的功能。

对于后期编辑屏幕,看起来可以可靠使用的第一个钩子是'add_meta_boxes'。尽管挂接确实将全局$post对象作为第二个参数(第一个是$post_type当前文章的)传递,但您只需要确保钩住时就在核心页面上即可。


4

posts_results是原始查询结果的过滤器。参见中的2627行wp-includes/query.php

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.