$ post / $ postsを確実に取得するための最も早いフック


8

$post/$postsフロントエンドとバックエンドの両方でグローバル変数にアクセスできる場所にフックできる最も早い可能なアクションは何ですか?私はコーデックスのリファレンスアダム・ブラウンのリファレンスを調べてソースを何回か読み飛ばしてみましたが、良いものを見つけるのにあまり運がありませんでした。

pre_get_posts早すぎます。posts_selectionコールバック中に2回目のget_posts()呼び出しを行う場合、を使用しても機能しません。そして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)のようなフックがあるはずです。両側に。

回答:


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'関数WP::main()でのみ発生します。

編集後の画面の場合、確実に使用できる最初のフックは次のようになります'add_meta_boxes'。フックするときにコアページにいることを確認する必要があるだけですが、グローバル$postオブジェクトは2番目の引数として渡されます(最初の引数$post_typeは現在の投稿の引数です)。


4

posts_results生のクエリ結果のフィルタです。の行2627を参照してくださいwp-includes/query.php

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.