WordPressでは、URLはルートにマップされません。データベースクエリにマップします。
「デフォルト」パーマリンクモードでWordPressを使用する場合、?p = 1や?page = 234などのように、メインURLクエリに一連の変数があります。また、?s = searchと他の多くがあります。
「きれいな」パーマリンクを使用すると、「書き換えルール」と呼ばれる大きなルールセットが作成され、さまざまなURLパターンがこの同じURLパラメータセットに直接マッピングされます。したがって、/ 2014/04/12 / exampleのようなURLは?year = 2014&month = 04&day = 12&postname = exampleなどにマッピングされます。したがって、このマッピングが行われた後、これらにも同様に適用されます。
これらの変数は、本質的にWP_Queryクラスのメインインスタンスを制御しています。WP_Queryクラスは、データベースクエリを構築してデータベースから「投稿」を取得するすべての情報を保持します。渡されるさまざまなパラメーターは、作成するクエリの種類と取得するデータを制御します。
ご覧ください、WordPressで表示できるものはすべて、本質的に「投稿」です。ブログは、時間ベースの逆順の一連の投稿です。「ページ」は、名前が定義された静的な投稿です。「カスタム投稿タイプ」とは、まさにあなたが定義したカスタムタイプの「投稿」のようなものです。WordPressで何かを表示するためのすべての主要なクエリは、wp_postsテーブルから投稿のサブセットを取得しています。
WP_Queryはそれを行うものです。そして、URLからのパラメーターはそのメインクエリに直接送信され、そこで使用されます。
次に、テーマは、クエリが返す内容に基づいて、使用するテンプレートを決定します。/ category / exampleをリクエストした場合、それは?category_name = exampleになります。つまり、メインの$ wp_query-> query_vars配列がその情報を取得し、WP_Queryが「example」カテゴリの最後のX投稿を引き出します。 is_categoryフラグをtrueに設定します。
テンプレートローダーはこの後に実行され、is_category()がtrueを返すことを確認し、カテゴリテンプレートを選択することを決定します。したがって、テンプレートに従ってcategory-example.phpを探し、category.phpなどにフォールバックします。階層。
したがって、URLの動作を変更する場合の質問は簡単です。URLを変更するのか、それとも何にマップするのか。URLは関数にマップされないため、クエリを制御するパラメーターにマップされます。URLでメインクエリを調整する場合、特別なURLで他の特別なコードを実行する場合とは少し異なるプロセスになります。
また、コメントで特定の質問に答えるには、「投稿を実際に表示したくない場合はありませんか?」いいえ、ありません。すべてが投稿です。すべてのコンテンツは投稿に保存されます。コンテンツを別の場所に保存して別の場所に保存したい場合は、それを行うことができますが、正直なところ、通常は必要ないため、より困難です。特別なコンテンツがある場合は、カスタム投稿タイプを作成し、そのタイプの投稿としてコンテンツを保存し、URLパターンをそれにマッピングします。簡単です。