上一篇讲完了文章和页面两条线。但一个网站不止这两种页面——分类页、标签页、搜索结果页、404 页,它们各有各的模板。这一篇把剩下的一半补完。
访问一个分类(比如“Cloudflare 使用教程”),is_category() 为真,WordPress 按这个顺序找:
category-{别名}.php
category-{ID}.php
category.php
archive.php
index.php
category-cloudflare.php:只给这个分类用;category-5.php:按分类 ID 指定;category.php:所有分类通用;archive.php:所有“归档类”页面通用(分类、标签、日期都算);index.php:兜底。顺序几乎一样,只是把 category 换成 tag:
tag-{别名}.php
tag-{ID}.php
tag.php
archive.php
index.php
这两种比较“冷门”,通常没有专门的模板,直接走:
archive.php
index.php
search.php
index.php
这里有个特别容易搞混的地方:searchform.php 和 search.php 不是一回事。
| 文件 | 管什么 |
|---|---|
searchform.php |
搜索输入框长什么样(那个小表单) |
search.php |
搜索结果页长什么样(列出找到的文章) |
很多新手看到 searchform.php,以为搜索页已经做好了——结果搜索结果页还是用 index.php 兜着,长得跟首页一模一样。
404.php
index.php
同理,没有 404.php,访问不存在的地址时会用 index.php 顶替。
front-page.php (静态首页)
home.php (文章列表首页)
index.php (兜底)
区别在于后台怎么设置的:
home.php;front-page.php。caogenbj 没建 home.php 也没建 front-page.php,所以首页直接落到 index.php。
我把 caogenbj 的文件清单拉出来看,发现它只做了这些:
| 文件 | 有没有 |
|---|---|
| index.php | 有 |
| single.php | 有 |
| page.php | 有 |
| category.php | 有 |
| searchform.php | 有(是搜索框,不是结果页) |
| tag.php | 缺 |
| archive.php | 缺 |
| search.php | 缺 |
| 404.php | 缺 |
少几个文件本身不是错——模板层级会兜底,网站照样能跑。但“兜底”出来的样子,可能不是你想给的。
我实测了一下,访问一个不存在的地址(随便编一个 this-page-not-exist.html),结果是:
也就是说,访客输错网址,看到的不是“你要找的页面不存在”,而是一堆跟他要找的东西毫无关系的文章。他会怎么想?大概是“这站怎么回事”。
搜索结果页也是一样。我搜一个词,页面的主标题还是首页那句“草根站长笔记:WordPress建站、SEO优化与生活小知识分享”,而不是“某某的搜索结果”。访客根本不知道自己现在在“搜索”这个状态里。
这就是模板层级的下半句:它不只是“找得到文件”,它还决定“用户看到的对不对”。兜底能让网站不报错,但兜底不等于合适。
如果你也想给自己的站补,建议按这个顺序:
一句话记住:每一种页面都有自己的一条查找线,线的尽头都是 index.php;兜底能跑,但兜底不等于好看。
到这里,模板层级就讲完了。下一篇换个角度:一个主题最少要几个文件才能跑起来——答案可能比你想的少很多。