在WordPress中,URL不会映射到路由。它们映射到数据库查询。
在“默认”永久链接模式下使用WordPress时,主URL查询中有一组变量,例如?p = 1或?page = 234等。还有?s = search和许多其他搜索。
如果使用“漂亮”永久链接,则会创建一大套称为“重写规则”的规则,这些规则将各种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,并决定选择类别模板,因此根据模板,它将查找category-example.php并返回category.php等。层次结构。
因此,是否要更改URL的工作方式的问题很简单:是否要更改URL或映射到URL?由于URL未映射到函数,因此将它们映射到控制查询的参数。如果要让URL调整该主查询,则与希望特殊URL运行完全其他特殊代码的过程稍有不同。
并在评论中回答您的特定问题:“在某些情况下您实际上并不想显示帖子吗?” 不,那里没有。一切都是职位。所有内容都存储在帖子中。如果您想将内容存储在其他地方并且与众不同,则可以执行此操作,但是这样做比较困难,因为老实说,通常不需要这样做。如果您有特殊的内容,请创建自定义帖子类型,将内容存储为具有该类型的帖子,然后将URL模式映射到该帖子。简单。