web-dev-qa-db-ja.com

ワードプレスのルーティングはどこのように機能しますか?

コアWPルーティングはどのように機能しますか?私は理解するのに苦労しています... MVCでは、あなたのURLはMyController-> myaction()にマップするmycontroller/myactionのように見えます

Drupalでは、index.php?q = mycustomerpath/helloは好きな関数にマッピングすることができ、テーマレイアウトに "テーマ"の内容を返します。

しかし、WPでは、私は物事が行われている方法の手がかりを持っていない...それは? (経路)..最初にコアルーティングの基本を理解したい。

13
yeahman

WordPressでは、URLはルートにマッピングされません。それらはデータベースクエリにマッピングされます。

WordPressを "デフォルト"のパーマリンクモードで使用する場合、メインURLクエリに?p = 1や?page = 234のように一連の変数があります。 ?s =検索や他にもたくさんあります。

「きれいな」パーマリンクを使用すると、さまざまな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を返すことを確認し、カテゴリテンプレートを選択することを決定します。したがって、Templateに従ってexample-example.phpを探し、category.phpにフォールバックします。階層。

そのため、URLの機能を変更する場合の質問は簡単です。URLを変更しますか、それともマッピング先を変更しますか。 URLは関数にマッピングされていないため、クエリを制御するパラメータにマッピングされています。 URLにメインクエリを調整させたい場合は、特別なURLにまったく別の特別なコードを実行させる場合とは少し異なります。

そしてコメントであなたの具体的な質問に答えるためには:「あなたが実際に投稿を表示したくないケースはありませんか?」いいえ、ありません。すべてが投稿です。すべてのコンテンツは投稿に保存されます。他の場所にコンテンツを保存して別の場所に保存したい場合は、そうすることができますが、正直なところ、通常は必要ではないため、より困難です。特別なコンテンツがある場合は、カスタム投稿タイプを作成し、そのタイプの投稿としてコンテンツを保存し、それにURLパターンをマッピングします。簡単です。

20
Otto