問題描述
核心 wp 路由如何工作?我很難理解… 在 MVC 中,您的 URL 看起來像對映到 MyController-> myaction() 的 mycontroller /myaction
在 drupal 中,它是 index.php?q = mycustomerpath /hello,可以對映到您喜歡的任何函式,它將”themed” 的內容返回到主題佈局中。
但是在 wp 中,我不知道如何完成… 它是?p = 1 然後?product = 1 … 我已經搜尋路由流的檔案,但找不到任何 (谷歌只是返回文章定製路線).. 我想了解核心路由的基本原理..
最佳解決方法
在 WordPress 中,URL 不對映到路由。它們對映到資料庫查詢。
在”default” 永久連結模式下使用 WordPress 時,主 URL 查詢中有一組變數,如 p = 1 或?page = 234 等等。還有 s =搜尋等等。
如果您使用”pretty” 固定連結,則會建立一系列稱為”rewrite rules” 的規則,將各種 URL 模式直接對映到同一組 URL 引數上。因此,像/2014/04/12 /example 這樣的 URL 將對映到?year = 2014& month = 04& day = 12& postname =示例或類似。所以以下這些也適用於這些對映之後。
這些變數實際上是控制 WP_Query 類的主例項。 WP_Query 類儲存構建資料庫查詢的所有資訊,以從資料庫獲取”posts” 。傳入其中的各種引數控制它構建什麼樣的查詢以及獲取哪些資料。
看到,WordPress 可以顯示的一切都是”post” 。一個部落格是一系列的帖子反向 time-based 順序。 “page” 是一個具有定義名稱的靜態文章。一個 「自定義帖子型別」 正是它的聲音,一個”post” 與你定義的型別。在 WordPress 中顯示任何內容的所有主要查詢都是從 wp_posts 表中獲取一些子帖子。
WP_Query 是什麼?來自 URL 的引數直接傳送到該主查詢中並在那裡使用。
然後,主題根據查詢返回的方式確定要使用的模板。如果您要求/類別/示例,那麼這將成為?category_name =示例,這意味著主 $ wp_query-> query_vars 陣列將獲取該資訊,並且 WP_Query 將拉出”example” 類別的最後 X 個帖子,它將將其 is_category 標誌設定為 true 。
template-loader 將在此之後執行,請參閱 is_category() 返回 true,並決定選擇類別模板,因此將根據模板層次結構查詢 category-example.php 並返回到 category.php 等。
所以,如果你想改變 URL 的工作方式很簡單:你想改變 URL 還是對映到哪裡?由於 URL 未對映到函式,因此它們對映到控制查詢的引數。如果您希望網址調整該主要查詢,那麼這是一個稍微不同的程式,如果你想要一個特殊的 URL 執行一些完全其他特殊的程式碼。
並在評論中回答你的具體問題:「不是在那裡你真的不想顯示帖子的情況?」 不,那裡沒有。一切都是帖子所有內容都儲存在帖子中。如果你想將其他地方的內容儲存在不同的地方,那麼你可以做到這一點,但是更難,因為老實說通常不是必需的。如果您有特殊內容,請製作自定義的帖子型別,將您的內容儲存為具有該型別的帖子,將 URL 模式對映到該型別。簡單。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。