模版是一些PHP文件,他可以输出HTML代码呈献给浏览器,决定着主题的外观.下面让我们来看一下主题的模板.
WordPress允许为你的网站定义不同的模板.他虽然不是必需的,但是这些不同的模板为你的网站添上一笔. 模板是根据Template Hierarchy的,由一个具体的主题决定.
作为一个主题开发者,你可以自由决定如何定制你的模板.比如说,极端情况下, 你甚至可以仅仅使用一个文件index.php作为模板文件,所有 页面都会使用这个模板.更多的情况是,使用不同的模板文件产生不同的结果,以达到最大定制.
模板文件列表
这里是被WordPress确认的主题文件列表.当然,你的主题可以包含任何样式表,图像或者文件.记住 下面列出的文件对WordPress有特殊的意义– 点击模板层次 查看具体情况.
-
style.css
-
主样式表,这个文件 必须 位于你的主题里面,而且必须在头部注释处写清楚你的主题的信息.
-
rtl.css
-
rtl 样式表。如果网站的阅读方向是自右向左的,他会自动被包含进来。你可以使用 the RTLer 插件来生成这个文件.
-
index.php
-
主模板.如果你的主题使用自己的模板,index.php 是必须要有的.
-
comments.php
-
评论模板.
-
front-page.php
-
首页模板,仅用于开启 静态首页 时。
-
home.php
-
主页模板,默认的首页。如果你开启了 静态首页 这是展现最新的文章的模板页面。
-
single.php
-
单独页面模板。显示单独的一篇文章时被调用。对于这个以及其他的请求模板,如果模板不存在会使用 index.php。
-
single-{post-type}.php
-
自定义单独页面模板。例如, single-books.php 展示自定义文章类型为 books的文章. 如果文章类型未被设置则使用index.php。
-
page.php
-
页面模板. 独立页面调用。
-
category.php
-
分类模板。 分类页面调用。
-
tag.php
-
标签模板。标签页面调用。
-
taxonomy.php
-
术语模板。请求自定义分类法的术语时使用。
-
author.php
-
作者模板。作者页面调用。
-
date.php
-
日期/时间模板,按时间查询时使用的模板。
-
archive.php
-
存档模板。查询分类,作者或日期时使用的模板。需要注意的是,该模板将会分别被category.php, author.php, date.php所覆盖(如果存在的话)。
-
search.php
-
搜索结果模板,显示搜索结果时使用的模板。
-
attachment.php
-
附件模板,查看单个附件时使用的模板。
-
image.php
-
图片附件模板。当在wordpress中查看单个图片时将调用此模板,如果不存在此模板,则调用attachment.php 模板。
-
404.php
-
404 错误页面 模板。当WordPress无法查找到匹配查询的日志或页面时,使用404.php文件。
按照Template Hierarchy,这些文件在 WordPress 中有特殊的意义,即当对应的 条件标签 返回 true 的时候,他们将在这种情况下代替index.php ,例如,如果当前显示的是单一的一篇博文,那么is_single() 这个函数将返回'true',并且如果有一个single.php文件存在于当前主题中,该文件模板就将起作用。
基本模板
在最简单的情况下,一个WordPress主题由两个文件构成:
-
style.css
-
index.php
这些文件都位于主题目录. 这index.php 模板 是非常灵活的.他可以用来包含所有的引用 header, sidebar, footer, content, categories, archives, search, error, 和其它在WordPress产生的文件.
或者,他也可以模块化,使用单独的文件分担工作.如果你没有提供其它的模板文件,WordPress 会使用默认文件.比如说,如果你没有提供comments.php 文件, WordPress会自动使用 wp-comments.php 模板文件 Template Hierarchy. (注意: 自3.0起,那些默认的文件已经不能保证都存在或者跟以前的一样。提供你自己的模板文件会更安全。)
典型的模板文件包括:
-
comments.php
-
footer.php
-
header.php
-
sidebar.php
使用这些模板文件,你可以把这些文件嵌入到index.php 中,最后生成的文件里.
-
包含header, 使用get_header().
-
包含sidebar, 使用 get_sidebar().
-
包含 footer, 使用 get_footer().
-
包含 search form, 使用 get_search_form().
include 用法:
<?php get_sidebar(); ?> <?php get_footer(); ?>
关于更多的如何利用各种模板,如何产生不同的信息, 请阅读 Templates 文档.
自定义页面模板
定义每一个页面模板的文件都放在你的 Themes 文件夹里面。为了创建一个自定义页面你需要首先创建一个文件,假设我们的第一个自定义页面叫做snarfer.php。在snarfer.php的文件顶部,你必须要这么写:
<?php /* Template Name: Snarfer */ ?>
以上代码定义snarfer.php为Snarfer模板,在创建其它页面的时候Snarfer可以替换成其它名字。这个模板名字会作为一个链接出现在主题编辑器中,单击它就可以编辑这个文件。
你可以使用任何以.php为后缀的有效文件名(查看 reserved Theme filenames 中你不应该使用的文件名;WordPress保留了特定的文件名以供特殊用途)。
紧接着上面五行代码之后的内容取决于你。你随后编写的代码将控制使用 Snarfer 模板的页面会如何显示。查看 Template Tags 了解你可以使用的丰富的 WordPress 模板函数。你会发现直接从其他模板文件(page.php 或者 index.php)中拷贝代码到 snarfer.php 中,然后在文件顶部添加那五行代码会更加方便。如此以来仅需替换 HTML 和 PHP 代码而不至于从零开始。展示一个例子 below。一旦你创建了页面模板并将之放在你的主题目录中,你便可以在创建和编辑页面时采用它。(提醒:当创建或编辑页面时,除非你按如上方法定义了至少一个模板,否则页面模板类型选择菜单不会出现。)
基于查询的模板文件
WordPress 可以根据不同的查询类型加载不同的模板。 有两个办法: 根据模板层次命名你的模板文件,或者在循环中使用条件标签(if 语句).
为了应用模板层次,你仅需要提供特定的模板文件,它们会分别自动替代 index.php。例如,如果你提供一个 category.php 模板文件,当文章分类页面被请求时, category.php 会替代 index.php 被加载。如果 category.php 文件不存在时, index.php 被正常加载。
你甚至可以通过给文件定义更加准确的名字从而获得更加细致的模板层次,例如 category-6.php —— 当请求 ID 为 6 的文章分类时该模板会优先于 category.php 被加载(在WordPress 2.3及以下版本中,当以管理员登陆后,你可以在Manage > Categories找到分类ID。自WordPress 2.5开始ID栏目被移除了。你可以单击'编辑分类'然后查看浏览器的URL地址找到当前分类的ID。它看上去像这样'…categories.php?action=edit&cat_ID=3',其中3就是分类ID)。想要了解具体的流程,参考 分类模板。
较之于自动加载模板层次中提供的模板文件,如果你的主题需要自己控制想要加载的文件,你可以使用条件标签。条件标签在 The Loop In Action 中检查指定的条件是否为真,然后你可加载特定的模板,或基于条件在屏幕上显示特定内容。
举例,针对一个指定分类的文章采用特定的样式表,代码像下面这样:
<?php if ( is_category( '9' ) ) { get_template_part( 'single2' ); // looking for posts in category with ID of '9' } else { get_template_part( 'single1' ); // put this on every other category post } ?>
或者使用查询,看起来像这样:
<?php $post = $wp_query->post; if ( in_category( '9' ) ) { get_template_part( 'single2' ); } else { get_template_part( 'single1' ); } ?>
无论何种情况,这份示例代码会依据不同的文章分类加载显示不同的模板。然而查询条件是不仅限于分类的,查看条件标签了解所有选择。
定义模板
可以使用WordPress插件系统来定义你的个人模板。这项高级特性可以通过 template_redirect 动作钩子实现。想要了解关于创建插件的更多信息,参考插件API.
包含模板文件
为了加载其他模板(除了 header, sidebar, footer 这些已经被预先定义了加载命令的例如 get_header())到某个模板中,你可以使用 get_template_part()。这利于主题的代码重用。
引用模板中的文件
当在同一个主题中引用其他文件时,避免使用硬编码的 URLs 和文件路径。请使用 bloginfo() 引用 URL 和文件路径:参看从模板中引用文件.
注意样式表中使用的 URLs 是相对于样式表本身的,而不是相对于引用这个样式表的文件。例如,如果你在主题中包含 images/ 目录,你只需要在CSS中指明相对路径,像这样:
h1 { background-image: url(images/my-background.jpg); }