问题描述
核心 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。