在定制 WordPress 主题时,我们至少要了解一下的知识要点。
了解主题的基本结构
一个 WordPress 主题包含很多文件。其中,具有根据访问页面生成HTML代码作用的文件称为模板文件。
模板文件
WordPress 根据访问的页面类型使用不同的模板文件。下图就是一个例子。
在该图中,例如,首页模板文件被编写为使用“index.php”。然而,该图仅显示了一般组合,并不一定使用“index.php”。这涉及以下模板层次结构:
模板层级
模板层级是输出模板文件时的优先顺序。
例如,类别存档(列出属于同一类别的帖子的页面)的模板层次结构(优先级)如下。
- category-slug.php
- category-ID.php
- category.php
- archive.php
- index.php
可以看到,用于显示分类档案的模板文件有5个或更多候选。
之所以只列举了5个模板,是因为我们可以替换category-slug.php和category-ID.php的“-slug”和“-ID”部分,这样就可以追加很多模板。
例如,我们网站上的“ WordPress Basics ”类别有一个“excel”的slug和一个 ID“1”。用于展示该分类存档页面的模板文件,首选“category-excel.php”。如果此文件不存在,将使用“category-1.php”,然后是“category.php”、“archive.php”和“index.php”。
第四个“archive.php”不仅是一个类,也是“日期”和“标签”的归档页面的候选。如果只针对分类存档,想将显示内容与其他存档页面分开,可以看到应该修改或新建一个高于“category.php”的模板文件。
除此之外,还有一种使用条件分支标签的方法(稍后介绍)。
模板标签
当您希望 WordPress 显示或检索某些内容时,使用模板标签。模板标签写在模板文件中
常用的模板标签之一是“bloginfo()”。“bloginfo()”是一个模板标签,用于显示博客信息,例如博客标题、URL 和描述。
要使“bloginfo()”像这样工作,请像这样在 () 中编写参数:* 在下面的示例中,粗体部分是参数。
博客标题: | <?php bloginfo(‘name’); ?> |
博客网址: | <?php bloginfo(‘url’); ?> |
博客描述: | <?php bloginfo(‘description’); ?> |
WordPress 中还有许多其他可用的模板标签。
此外,您还应该记住 include 标签和条件标签,它们是模板标签的类型。
包含标签
包含标签用于包含其他模板文件。大多数主题都将其编写为显示站点的页眉、页脚和侧边栏。
上图展示了在输出“single.php”时,“header.php”、“footer.php”和“sidebar.php”是如何加载的。此时,在“single.php”中记述了以下的include标签。
- <?php get_header(); ?>
- <?php get_footer(); ?>
- <?php get_sidebar(); ?>
除此之外,用于读取搜索表单 (searchform.php) 的“<?php get_search_form(); ?>”和用于读取评论模板 (comments.php) 的“<?php comments_template(); ?>”是也常用。
使用“include 语句”读取文件
要加载其他模板文件,请使用 PHP 的“include 语句”。例如,要读取文件“sample.php”,
<?php include( TEMPLATEPATH . ‘/sample.php’ ); ?>
条件标签
条件分支标签可以根据要输出的页面类型和页面中包含的数据来判断条件,划分要处理的内容。
条件分支标签也可以用在“如果只有类别档案与其他档案页面的显示内容不同……”的情况下。在模板文件“archive.php”中,为了以特殊方式只显示类别档案,编写如下。
<?php if ( is_category() ) : ?>
//在这写
分类的内容
<?php else : ?>
//在这写不是分类的内容
<?php endif; ?>
也可以在类别存档中以不同方式仅显示特定类别。仅自定义 slug 为“sample”的类别的条件分支标签是
<php if ( is_category('sample') ) : ?>
我们常用的其他常用的条件标签是:
is_home() | 判断是否是主页面 |
is_front_page() | 判断是否为首页 |
is_single() | 确定个人帖子页面 |
is_page() | 判断页面是否静态 |
循环
<?php if (have_posts()) : ?>
//投稿一览之前的处理
<?php while (have_posts()) : the_post(); ?>
//各个投稿的处理内容
<?php endwhile; ?>
//投稿一览之后的处理内容
<?php else : ?>
//没有投稿时的处理内容
<?php endif; ?>
在此结构内编写 HTML 或模板标签以自定义循环功能。