WordPressがグローバルな$wp_query
を設定し、has_posts()
とthe_post()
関数を使えるようにするためのメインクエリをいつ開始するのでしょうか。アーカイブテンプレートを使用してページを作成した場合、クエリを設定する方法はどのようにしてわかりますか?
私は archive.php をWordPressのデフォルトテーマの一つで見ています。アーカイブページがありますが、get_header()
とhas_posts()
を呼び出すだけなので、クエリはすでに設定されています。それでWordPressはURLでカスタム投稿タイプのパラメータを使うようにURLをルーティングしますか?
カスタムアーカイブページを作成する場合は、メインのクエリをどこで変更すればよいですか。新しいアーカイブテンプレートファイルでは?
User Rarst は 非常に有名な答えを持っています 彼はどこにレイアウトしています ロードプロセス 。 wp-blog-header.php
がロードされるたびにこのグラフを見ると、$post
や$wp_query
のような多くのWordPressグローバルを設定する関数wp()
が呼び出されます。 ( 二次参照 ユーザー別 Gmazzap )
これは技術的な面ですが、質問の中心は独自のカスタムアーカイブページを作成することです。 WordPressには テンプレート階層 があり、カスタム投稿タイプなどのために カスタムアーカイブ を作成できます。
メインのクエリを変更するもう1つの一般的な方法は、 pre_get_posts
というfunctions.phpファイルで Hook を使用することです。これにより、WordPressが実際にデータベースにpingを実行して情報を取得する前にクエリオブジェクトを変更して、さまざまな設定でThe Loopを簡単に変更できるようになります。デフォルトの10の代わりに20の投稿を表示するようにループを変更する例は次のようになります。
function wpse_265733( $query ) {
// Don't run on admin
if( $query->is_admin ) {
return;
}
// Run only on the blog page
if( is_home() ) {
$query->set( 'posts_per_page', 20 ); // Set posts per page to 20.
}
}
add_action( 'pre_get_posts', 'wpse_265733' );
プラグインとテーマ関数がロードされた後、WordPressは書き換え規則のリストをたどって要求に一致するパターンを見つけることによって、入ってくる要求をクエリ変数に解析します。
組み込みの型ページ、さまざまなアーカイブ、単一ビュー、ページ編集、フィードには、デフォルトの規則がいくつかあります。独自のルールやエンドポイントを手動で追加することも、カスタムコンテンツ用にこれらすべてのルールを自動生成できる新しいコンテンツタイプを登録することもできます。
リクエストがクエリ変数に変換されると、クエリが実行されます。多くの場合、クエリの結果によって、どのテンプレートが読み込まれるかが決まります。
それからもちろんテンプレートがロードされ、すべてがうまくいっています。
そうは言っても、あなたがすべてのステップで物事を修正することを可能にするために利用可能な多くのアクションとフィルタがあります。プロセスのより詳細な見方とそれらのいくつかが何かを見るために、 Action Reference を見てください。
最も簡単で一般的な方法は pre_get_posts
action です。これによりクエリ変数が公開され、クエリを実行する前に変更を加えることができます。クエリ変数の参照については WP_Query
を参照してください。
それがあなたのニーズを満たさない場合は、 request
filter を見てください。これは、WordPressが起こっているリクエストのタイプについて決定を下す前に、クエリvar抽出の直後に実行されるので、より根本的なクエリ操作を可能にします。