Frühester Haken, um zuverlässig $ post / $ posts zu erhalten

8

Was ist die frühestmögliche Aktion, mit der ich auf die globalen $post/$postsVariablen sowohl am Front- als auch am Backend zugreifen kann ? Ich habe mehrmals versucht, die Codex-Referenz , die Referenz von Adam Brown, durchzusehen und die Quelle zu überfliegen, hatte aber nicht viel Glück, eine gute zu finden.

pre_get_postsist zu früh; Die Verwendung posts_selectionfunktioniert nicht, wenn Sie während des Rückrufs einen zweiten Aufruf von get_posts () ausführen möchten. und template_redirectläuft nicht auf der Admin-Seite. the_postMöglicherweise früher als template_redirectfür das Frontend, aber es läuft auch nicht für das Backend. Idealerweise möchte ich etwas, das kurz vor der get_post()/get_posts()Rückkehr läuft , aber ich sehe so etwas nicht.

Ich habe den the_postsFilter in der Vergangenheit verwendet, aber ich würde eine Aktion bevorzugen, weil sie technisch korrekter ist.

Im Moment bin ich nur zweimal dabei. einmal template_redirectfür das Frontend und wieder admin_xml_nsfür das Backend. Das gefällt mir allerdings nicht wirklich, da meine Logik nicht semantisch mit einem dieser Hooks zusammenhängt und es so aussieht, als ob dies ein sehr häufiges Bedürfnis ist und es einen Hook wie "post_get_posts" (ala pre_get_posts) geben sollte, der funktioniert auf beiden Seiten.

Ian Dunn
quelle

Antworten:

12

Für alle Admin-Seiten und Front-End-Seiten mit Ausnahme der einzelnen Post-Edit-Bildschirme ( wp-admin/post.php) 'wp'ist dies der zuverlässigste Hook, um die globalen Werte abzurufen.

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

Sie können dort sehen, dass es unmittelbar nach WP::main()Bränden feuert WP::register_globals(). Das Problem bei der Verwendung von Dingen wie post_resultsund get_postsist, dass sie jedes Mal ausgeführt werden, wenn Sie eine Abfrage nach Posts durchführen. 'wp'wird nur in der Funktion ausgelöst WP::main(), mit der der WP-Kern die Hauptanforderungsabfrage der Seite ausführt.

Für Post-Edit-Bildschirme sieht es so aus, als wäre der erste Hook, den Sie zuverlässig verwenden können 'add_meta_boxes'. Sie müssen nur sicherstellen, dass Sie sich beim Einbinden auf einer Kernseite befinden, obwohl das globale $postObjekt als zweites Argument übergeben wird (das erste ist das $post_typedes aktuellen Beitrags).

John P Bloch
quelle
4

posts_resultsist der Filter für das rohe Abfrageergebnis. siehe Zeile 2627 in wp-includes/query.php.

Milo
quelle