問題描述

核心 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。