WordPress主题开发教程 4_一节理论课

江河/ 04月01日/ WordPress/ 浏览 673

之前的课程中,我们都是在动手操作。虽然,取得了一点成果,但是,没有理论支撑,心中难免有点不踏实。这次我们就来点理论吧。




这是 WordPress 经典主题的【路由-模板】图。也就是说:一个用户进入一个WordPress站点(一个网站链接),由哪一个模板文件(PHP文件)来处理这个链接请求,搞懂这张图就可以了。


乍一看这张图,还是有点复杂的。我们先把关注点放在下图红框中的部分,其他的暂时先不管。



这个图简化后,先看左边。WordPress 把站点的链接(这里只讨论前台的链接)分为六类:归档页面、单页、站点首页、博客文章索引页、404页、搜索结果页。


归档页面,常见的有分类文章列表和标签文章列表,比如酱茄开源主题的分类文章列表页面:




当访问这个页面的时候,将由 archive.php 文件来处理请求。如果主题中不存在 archive.php 文件,那么由 index.php 来处理。


单页,常见的就是文章详情页和page页面(关于我们、隐私政策等页面)。当访问这个页面的时候,将由 singular.php 文件来处理请求。如果主题中不存在 singular.php 文件,那么由 index.php 来处理。


酱茄开源主题中没有 singular.php 文件,文章详情页是不是就是 index.php 复杂的?


并不是。因为,酱茄开源主题中有优先级更高的 single.php 来处理文章详情页,而 page 页面则由 page.php 处理。


看上图,在 singular.php 前面,正是 single.php 和 page.php 。


我们可以总结出两个规律:


1. 图中越靠左的PHP文件,优先级越高,享有优先处理请求的权利


2. 一个请求一旦有一个PHP文件处理了,其他PHP文件就不再管了。


再看其他四类链接就简单了。


站点首页,先找 home.php ,如果没有 home.php,就用 index.php 。


博客文章索引页,先找 home.php ,如果没有 home.php,就用 index.php 。


404页,先找 404.php , 如果没有 404.php,就用 index.php 。


搜索结果页,先找 search.php , 如果没有 search.php,就用 index.php 。


等等……,如果没有 index.php 呢?我们在之前已经实验过了,如果没有 index.php ,WordPress 就会认为这个主题已经损坏:




所以说,一个 WordPress 经典主题,至少要有一个PHP文件:index.php


我们现在再返回开头看看那张完整的图。图片底部标注:深蓝色的为主模板文件,墨绿色为二级模板文件,橙红色为可变模板文件(即模板文件名中有一部分是变量),灰色则表示为文件类型。


博客文章索引页、404页、搜索结果页,这三种和之前相比没有变化,就不再啰嗦。重点看看其他三种。


归档页面,又分为按作者文章归档,按文章分类归档,按“自定义文章”类型归档,按“自定义文章分类”类型归档,按日期归档,按标签归档。


理论总是晦涩难懂,还是举例说明:


当访问一个作者 ID 为 99,nicename 为 zhuige 的作者文章归档页。WordPress 将按优先级高低依次在主题中寻找 author-zhuige.php、author-99.php、author.php、archive.php、index.php。


当访问文章分类归档页,假如分类slug为zhuige、分类id为 99。WordPress 将按优先级高低依次在主题中寻找 category-zhuige.php、category-99.php、category.php、archive.php、index.php。


假如,有一个“自定义文章”类型:news,访问 news 类型文章的归档页。WordPress 将按优先级高低依次在主题中寻找 archive-news.php、archive.php、index.php。


假如,有一个“自定义文章分类”类型:news_cat,且 news_cat 中有一个分类名称叫:zhuige。WordPress 将按优先级高低依次在主题中寻找 taxonomy-news_cat-zhuige.php、taxonomy-news_cat.php、taxonomy.php、archive.php、index.php。


当访问日期归档页面,无论是按年归档,按月归档,按日归档。WordPress 将按优先级高低依次在主题中寻找 date.php、archive.php、index.php。


当访问文章标签归档页,假如标签slug为zhuige,标签ID为 99。WordPress 将按优先级高低依次在主题中寻找 tag-zhuige.php、tag-99.php、archive.php、index.php。


剩下的单页和主页才是最让人头疼的,犹豫再三,我还是先简化说一下,因为这一部分非常绕且用的比较少。简化一下既可以避免在这里头疼,又不会影响后续课程的学习。简化后的图如下:




简化后的图,估计现在大家一看就明白了。


“附件”详情页,attachment.php->single.php->singular.php->index.php 。


自定义文章类型(zhuige)详情页,single-zhuige.php->single.php->singular.php->index.php。


文章(post)详情页,single-post.php->single.php->singular.php->index.php。


页面(page)详情页,假设页面 slug 为 zhuige,页面 id 为 99,page-zhuige.php->page-99.php->single.php->singular.php->index.php。


网站首页,front-page.php->home.php->index.php。


简化掉的有:附件相关、自定义页面模板、首页后台设置相关以及嵌入页面相关,这些在我们用到的时候再补充。


有朋友吐槽:每次的文章,一两分钟就看完了;不如做视频看着方便等等。


我想说的是,一两分钟就看完,说明是比较熟悉WordPress主题开发的朋友-这一系列课程本就是入门课程,或者仅仅是“看完”-朋友没有没上手操作一下呢?视频固然有视频的好处,但是当这一系列文章完成之后,想回头找某个小知识点,或者想复习一下的时候,文章的优势就体现出来了-能够大大地节省朋友们的时间。


虽然,这是一节理论课。但是,我都这么说了,朋友你有没有上手做个小实验,验证一下上面的理论呢?比如,新建文件category-zhuige.php、category-99.php、category.php、archive.php、index.php,在文件中只要一行代码:


<?php echo basename(__FILE__); ?>


然后,看一看、验证一下这个优先级顺序。


下周见,朋友们!



发表评论

暂无评论,抢个沙发...

客服 工单