フロントエンドとバックエンドの両方でグローバルな$post/$posts
変数にアクセスできるようになるために私がフックできる最も早いアクションは何ですか?私は コーデックスの参考文献 、 Adam Brownの参考文献 を見て、何度かソースを読み飛ばしてみましたが、良いものを見つけるのにはまだうまくいっていません。
pre_get_posts
は早すぎます。コールバック中に2回目のget_posts()呼び出しを行いたい場合、posts_selection
の使用は機能しません。 template_redirect
は管理者側では動作しません。 the_post
はフロントエンドのtemplate_redirect
より早いかもしれませんが、バックエンドでも動作しません。理想的にはget_post()/get_posts()
が戻る直前に実行されるものが欲しいのですが、私はそのようなものを見ていません。
私は過去にthe_posts
フィルタを使用しましたが、技術的に正しいのでアクションをお勧めします。
今は2回だけフックしています。フロントエンドにtemplate_redirect
を使い、バックエンドにadmin_xml_ns
を使います。私のロジックはこれらのフックのどちらにも意味的に関連していないので、私はあまり好きではありません。これは非常に一般的なニーズであり、 "post_get_posts"(ala pre_get_posts
)のようなフックがあるはずです。両側で動作します。
個々の編集後の画面(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 coreがページのメインリクエストクエリを実行するために使用するものです。
編集後の画面では、確実に使用できる最初のフックは'add_meta_boxes'
です。あなたがフックインするとき、あなたがコアページにいることを確認する必要があるだけですが、それはグローバルな$post
オブジェクトを第2引数として渡します(最初は現在の投稿の$post_type
です)。
posts_results
は、生のクエリ結果に対するフィルタです。 wp-includes/query.php
の2627行目を参照してください。