私のプラグインはwp_enqueue_style()とwp_enqueue_script()を使用してリソースをロードしますが、私はユーザのパフォーマンスを低下させず、現在の投稿のセットに自分のプラグインのショートコードが含まれる場合にのみロードするようにしました。私はこれを使用して行います:
add_filter('the_posts', 'CrayonWP::the_posts');
the_postsはwp_headの前に呼び出されますが、その後数回呼び出されることもあります(おそらくウィジェットなどの最近の投稿用)。
ここでの問題は、私が自分のショートコードをポストのコンテンツで検索してエンキュープロセスを知らせるときに、次のような場合があることです。
Wp_headが呼び出される前にページに表示される内容を確認するための明確な方法はありますか。
編集:
しかし、それは単一のページリクエストでthe_postsへの複数の呼び出しを考慮に入れません:(
編集2:
私が試したのは次のものを使うことです。
add_action('wp', 'CrayonWP::queue');
wp
アクションはリクエストが完了した直後に一度だけ使われるので。
そしてこの関数の中に:
global $wp_query;
$posts = $wp_query->posts;
しかし、$ wp_query変数がループ上でどのように変化するのかわかりません。 _postsフィルタが何度も呼び出されている場合、ウィジェットが独自のリクエストに送信するにつれて元のクエリが変更されている可能性がありますか?現時点ではページに表示されていない可能性があるため、 "最近の投稿"の投稿でショートコードをチェックしたくないのは明らかです。それで、the_posts
フィルタの代わりにwp
アクションフックを使うことは、それが単一のページであろうとホームページであろうと、その与えられたページのために要求された投稿を含みますか?
私はそれをテストしていませんが、実行されているクエリが移入に使用されているクエリであることをテストするために is_main_query() (3.3で登場)を使用できます。 「ループ」 (しかし、それが新しいWP_Query
インスタンスをどのように処理するかはわかりません)。
コーデックスはそれがpre_get_posts
で使用できると言っています、しかしそれが後のフックで呼び出すことができない理由を見ることができないコードを見ることができません(すなわちthe_posts
) - それはすべて現在の問い合わせに対してグローバル$wp_the_query
をチェックすることです。