WordPress上的路由是如何工作的?

时间:2014-04-12 作者:yeahman

核心wp路由是如何工作的?我很难理解。。。在MVC中,您的url看起来像映射到mycontroller->myaction()的mycontroller/myaction

在drupal中,它是索引。php?q=mycustomerpath/hello,可以映射到任何您喜欢的函数,该函数将“主题化”的内容返回到主题布局中。

但在wp,我不知道事情是怎么做的。。。是吗?那么p=1?产品=1。。。我已经搜索了路由流的文档,但找不到任何文档(google只返回有关自定义路由的文章)。。我想先了解核心布线的基本原理。。

1 个回复
SO网友:Otto

在WordPress中,URL不会映射到路由。它们映射到数据库查询。

在“默认”permalinks模式下使用WordPress时,在主URL查询中有一组变量,如?p=1或?页码=234,以此类推。还有呢?s=搜索和许多其他。

如果您使用“pretty”permalinks,那么将创建一个称为“重写规则”的大型规则集,它直接将各种URL模式映射到同一组URL参数上。那么像/2014/04/12/example这样的URL会映射到?年份=2014年;月=04(&;天=12(&;postname=示例或类似示例。因此,在完成映射之后,以下内容也适用于这些。

这些变量基本上控制着WP\\u查询类的主实例。WP\\u Query类保存构建数据库查询的所有信息,以从数据库中获取“post”。传递给它的各种参数控制它构建什么样的查询以及它获取什么样的数据。

看,WordPress可以显示的所有内容本质上都是一篇“帖子”。博客是一系列按时间倒序排列的帖子。“页面”是具有定义名称的静态帖子。“自定义帖子类型”就是它听起来的样子,一个带有您定义的自定义类型的“帖子”。在WordPress中显示任何内容的所有主要查询都是从wp\\u posts表中获取一些帖子子集。

WP\\u查询就是这样做的。URL中的参数直接发送到主查询中并在那里使用。

然后,主题根据查询返回的内容确定要使用的模板。如果您请求/类别/示例,那么它会变成?category\\u name=example,这意味着主$wp\\u query->query\\u vars数组将获取该信息,wp\\u查询将拉出“example”类别的最后X篇文章,并将其is\\u category标志设置为true。

模板加载器将在此之后运行,看到is\\u category()返回true,并决定选择类别模板,因此它将查找类别示例。php并返回到类别。php等等,根据模板层次结构。

因此,如果要更改URL的工作方式,问题很简单:是要更改URL,还是要更改URL的映射对象?因为URL没有映射到函数,所以它们映射到控制查询的参数。如果您想让URL调整主查询,那么这与您想让一个特殊URL运行一些完全其他特殊代码的过程略有不同。

并在评论中回答您的具体问题:“难道没有您实际上不想显示帖子的情况吗?”不,没有。一切都是一个帖子。所有内容都存储在帖子中。如果你想将内容存储在其他地方并与众不同,那么你可以这样做,但这更困难,因为老实说,这通常是不必要的。如果您有特殊内容,请创建一个自定义帖子类型,将您的内容存储为具有该类型的帖子,并将URL模式映射到该类型。容易的

结束

相关推荐

Rewriting URLs in Wordpress

我试图解决一个重写问题,但不完全理解如何阅读下面的代码。我相信event/industry/(.+)/?$\' 正在声明重写后新url中所需的格式,这应该是示例。com/事件/行业/某些术语/这部分似乎就是参数。=> \'index.php?post_type=eg_event&industry=\' . $wp_rewrite->preg_index(1)这是正确的理解吗?是什么告诉代码在我的新url中放置什么值,这是什么:(.+)/?$\' 是不是$wp_rewrite-