当访问者点击类别、标签或自定义分类的超链接时,WordPress就会按照该分类法过滤的逆时针顺序显示页面。
默认情况下,这个页面是使用index.php模板文件生成的。你可以创建可选的模板文件来覆盖和细化index.php模板文件。本节解释了如何使用和创建这样的模板。
分类法模板的层次结构
WordPress是按照模板层次结构决定的顺序来显示页面。
category.php、tag.php和taxonomy.php模板允许按分类法过滤的文章与未过滤的文章或按不同分类法过滤的文章区别对待。(注意:文章是指任何文章类型--文章、页面、自定义文章类型等)。这些文件让你针对特定的分类法或特定的分类法项目,比如说:
- taxonomy-{taxonomy}-{term}.php
- taxonomy-{taxonomy}.php
- tag-{slug}.php
- tag-{id}.php
- category-{slug}.php
- category-{ID}.php
因此,你可以将一个名为news的动物分类法中的所有文章编排在一个页面上,看起来与在其他类别中过滤的文章不同。
archive.php模板提供了最一般的控制形式,为所有的存档提供了一个布局;也就是说,一个显示文章列表的页面。
类别
对于类别,WordPress寻找category-{slug}.php文件。如果它不存在,WordPress会寻找下一个层次的文件,category-{id}.php,以此类推。如果WordPress没有找到任何专门的模板或archive.php模板文件,它就会恢复到默认行为,使用index.php。
类别的层次结构列举如下:
- category-{slug}.php: 例如,如果分类的slug是 "news",WordPress会寻找一个名为category-news.php的文件
- category-{ID}.php: 例如,如果分类的ID是 "6",WordPress会寻找一个名为category-6.php的文件
- category.php
- archive.php
- index.php
标签
对于标签来说,WordPress寻找的是tag-{slug}.php文件。如果它不存在,WordPress就会寻找下一个层次的文件,tag-{ID}.php,以此类推。如果WordPress未能找到任何专门的模板或archive.php模板文件,它将恢复到默认行为,使用index.php。
标签的层次结构列举如下:
- tag-{slug}.php: 例如,如果标签的slug被命名为 "sometag",WordPress会寻找一个名为tag-sometag.php的文件
- tag-{id}.php: 例如,如果标签的ID是 "6",WordPress会寻找一个名为tag-6.php的文件
- tag.php
- archive.php
- index.php
自定义分类
自定义分类法层次的工作方式与上述的类别和标签层次类似。WordPress寻找taxonomy-{taxonomy}-{term}.php文件。如果它不存在,WordPress会寻找下一个层次的文件,taxonomy-{taxonomy}.php,以此类推。如果WordPress未能找到任何专门的模板或archive.php模板文件,它将恢复到默认行为,使用index.php。
自定义分类法的层次结构列示如下:
- taxonomy-{taxonomy}-{term}.php: 例如,如果分类法被命名为 "sometax",而分类法的项目是 "someterm",WordPress会寻找一个名为taxonomy-sometax-someterm.php的文件
- taxonomy-{taxonomy}.php: 例如,如果分类法被命名为 "sometax",WordPress会寻找一个名为taxonomy-sometax.php的文件
- taxonomy.php
- archive.php
- index.php
创建分类法模板文件
现在你已经决定需要为基于分类法的内容创建自定义设计,从哪里开始呢?
与其从一个空白文件开始,不如复制层次结构中的下一个文件,如果它存在的话,这是一个好的做法。如果你已经创建了一个archive.php,复制一个名为category.php的文件,并根据你的设计需要进行修改。如果你没有archive.php文件,使用你的主题的index.php的副本作为起点。
如果你要创建任何分类法模板文件,请遵循同样的程序。使用你的archive.php、category.php、tag.php或index.php的副本作为一个起点。
示例
现在你已经在主题目录中选择了需要修改的模板文件,让我们看看一些例子。
在分类页面上添加文本
文章上方的静态文本
假设你想在分类页面的文章列表前显示一些静态文本。"静态 "是指无论下面显示哪些文章,也无论显示哪个类别,都保持不变的文本。
打开你的文件,在模板文件的"循环"上方,插入以下代码
<p> This is some text that will display at the top of the Category page. </p>
这段文字只显示在显示该类别文章的存档页上。
不同类别页面上的不同文字
如果你想根据访问者使用的分类页面显示不同的文本,怎么办?你可以在主category.php文件中添加默认文本,并创建特殊的category-{slug}.php文件,每个文件都有自己的文本版本,但这将在主题中创建很多文件。相反,你可以使用条件标签。
同样,这段代码将被添加到循环之前:
<?php if (is_category('Category A')) : ?> <p>This is the text to describe category A</p> <?php elseif (is_category('Category B')) : ?> <p>This is the text to describe category B</p> <?php else : ?> <p>This is some generic text to describe all other category pages, I could be left blank</p> <?php endif; ?>
这段代码的作用如下:
- 检查访问者是否请求了Category A,如果是,则显示第一段文字
- 如果用户没有请求category A,则检查category B,如果是,则显示第二段文字
- 如果两者都没有被请求的话,显示默认文本
只在存档的第一页显示文字
如果你有更多的文章,不适合在一个存档页面上全部显示,那么这个类别就会分裂成多个页面。当用户访问第一页时,如果你想显示一些静态文本。
要做到这一点,使用一个PHP的if语句,看一下WordPress的$paged变量的值。
在"循环"上面写上以下内容:
<?php if ( $paged < 2 ) : ?> <p>Text for first page of Category archive.</p> <?php else : ?> <?php endif; ?>
这段代码判断显示的页面是否为存档的第一页。如果是,则显示第一页的文本。否则,将显示后续页面的文本。
修改文章的显示方式
摘录与全文
你可以选择显示完整的文章或只是摘录,通过显示摘录,你可以缩短你的存档页长度。
打开你的文件,找到循环,寻找:
the_content()
并将其替换为:
the_excerpt()
如果主题显示的是摘录,但你想显示完整的内容,就用the_content替换the_excerpt。