菜单

剖析WordPress模板文件

2010年07月28日 - wordpress

在WordPress中如何按你的意愿显示页面,关键看你是否了解WordPress主题模板页面。 这里所说的主题文件是指显示页面的主题文件,而非实现评论、侧边栏等功能的主题文件。大多数用户不使用WordPress安装时自带的默认主题,他们会在互联网上下载免费主题。 这是一种设计博客版式的好方法,但不是所有主题开发者都用相同的方式编写主题。 主题的表现很大程度上取决于开发者用在主题上的开发时间和对WordPress的了解。

下面我会为大家介绍设计主题页面的所有相关知识,通过这些下面的信息你甚至可以开始为自己设计一个主题。 除非你是专家级的主题开发者,否则都可以从这里学到些新的东西。

WordPress如何工作

首先需要了解的是WordPress的模板层级,或者说是“WordPress调用页面的顺序”。 “index.php”是唯一一个所有WordPress主题的PHP文件中都必须具备的文件。“index.php”可以执行WordPress的所有单独功能。

页面调用顺序

每当有WordPress页面被调用时,WordPress的“引擎”会判断(通过排除法)页面的类型。 这类似于询问“我在哪儿?”。 WordPress回答“我在…类型的页面上”,然后以特定顺序调用页面。 WordPress找不到需要的PHP文件时,会使用“index.php”文件来代替所需文件。 WordPress首先会寻找以下九种基本页面:

首页
如果WordPress判断是在首页上,会先调用“home.php”文件然后再调用“index.php”。

日志页
如果是(单篇)日志页,首先调用“single.php”然后默认调用“index.php”。

页面
如果是静态页面或“页面型”页面(应用了模板的页面),WordPress首先调用“pagetemplate.php”然后默认调用“index.php”。

“分类”页
如果WordPress判断是分类页,则首先调用该类别编号的页面,例如“category-7.php”。 找不到相应文件时可以查找“category.php”(category.php可以用于所有类别页)。 如果没有“category.php”则继续查找“archive.php”,最后默认调用“index.php”。

标签页
如果WordPress判断是标签页,会首先加载“tag-slug.php”文件,以具体的slug(别名)为标签名。 如果标签是“wordpress hacks”,那么标签别名页就是“tag-wordpress-hacks.php”。 如果加载不成,WP会继续查找“tag.php”文件,该文件可用于所有标签页,然后调用“archive.php”,最后默认调用“index.php”。

作者页
博客拥有多个作者时,WP会首先寻找“author.php”文件以显示作者详情。 如果没有“author.php”则继续查找“archive.php”,最后默认调用“index.php”。

存档页
WP为之前的日志加载信息页面时,同时也加载了存档页。 WP首先加载“date.php”,其次“archive.php”,最后默认加载“index.php”。

搜索页或404页
若WP判断是在搜索结果页或404(页面未找到)页,会尝试加载search.php或404.php文件。 如果无法加载search.php或404.php,WP仍然默认加载“index.php”。

附件页
附件页是所有WordPress主题模板页面中使用次数最少的一种页面类型。 WordPress通常用这些特殊的附件页来加载若干信息,这些信息解释首先查找“image.php”, “audio.php”, “video.php”, 以及“application.php”的原因。 然后WP查找“attachment.php”或“single.php”,如果这两个文件不可用,默认查找“index.php”。

WP主题模板内部运行情况

可以用单独的index.php文件来调用以上九种类型的页面,这在上面也提到过。 也可以在一些条件标签中编写代码,我在这篇文章的结尾部分会告诉大家如何操作。 一个页面中可能含有很多代码,有时甚至有些混乱,这样我们要修改代码来进行设计就不太方便了。

不过凑巧的是,就像WordPress查找九种基本页面一样,每个主题模板页面也包含九种基本的WordPress元素:

  1. 调用页眉
  2. 开启the loop(主循环)
  3. 调用永久链接与(若干)meta
  4. 用以通知WordPress应获取的信息的调用
  5. 用以获取获取文章内容或摘要的调用
  6. (可能有)更多的meta
  7. 关闭the loop(主循环)
  8. 调用侧边栏
  9. 调用页脚

这是WordPress元素,能让这些元素运行的PHP代码分布在不同的地方,让你的主题版面和平面设计保持正常工作。 下面我要详细介绍一下这些元素,以便大家进一步了解如何设计主题模板页面。

调用页眉,侧边栏以及页脚

这三种元素基本类似。 当你在模板中看到以下代码:

<?php get_header(); ?>

表明WordPress打开了“header.php”文件。 get_sidebar() (sidebar.php) 和 get_footer() (footer.php)也是同样的道理。 你可能会有很多页眉、页脚和侧边栏,这时可以点击上面的“条件标签”查看相关内容。

开启the loop(主循环)

WordPress Loop”会在数据库中持续调用文件,直到WordPress终止调用。 “the loop”的结构随显示页面类型而变,WordPress尝试加载的每个基本类型页面都有一个“loop”。

下面是开启the loop的代码:

<?php if ( have_posts() ) : <?php if ( have_posts() ) : the_post(); ?>

我们可以看到,代码被拆分开来,have_posts用以定义条件标签,while和the_post则各成一部分,但这仍然是the loop,在所有页面中基本都是这样。 多行loop时的一个用法是:用query_posts在“if have_posts”和代码的剩余部分之间放置一个参数,用来显示单篇文章、某一时段的文章、最近一篇文章或者某一类别中的文章,也可以改变the loop中迭代文章的顺序。

调用永久链接与若干)meta

通过the loop的每次迭代,开放The loop的最后部分(the_post)能够激活元素数据。 这里的个体数据通常是指“post meta”, 尤其是永久链接(URL)、标题、时间这样的meta。大多数主题会在单篇文章内容前显示一些信息,然后在文章内容后也显示一些信息——比如文章类别和标签。

下面是一些你可以在post meta中调用的内容: the_permalink, the_ID, the_title, the_time, the_author, the_author_email, the_author_posts_link, the_category, single_cat_title, the_tags, single_tag_titls, edit_post_link, comments_popup_link, comments_rss_link

下面是Post meta的代码示例:

<div id=”post-<?php the_ID(); ?>”>
<h2><a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a></h2>
</div>

用以通知WordPress应获取的信息的调用

之后WordPress会决定所显示的单篇文章内容的详细程度。 文章详细程度取决于你的主题使用的是“the_content”(显示全文)或“the_excerpt”(显示摘要)。

可能有更多的meta

上面提到过,文章下方都有指定的类别或标签,有时你还可能看到“edit”链接。 一些主题甚至在文章内容后添加了date published meta。

关闭the loop(主循环)

代码如下:

<?php else : ?>
<?php endif; ?>

这是一个多行代码,你可以在其中添加其它信息,例如“Sorry, we didn’t find anything”。 你可以在侧边栏之后、调用侧边栏和页脚之前找到“next”“previous”导航链接。

Loops

大多数loops与我在上面所举的例子都差不多,但这并不表示你不能随意修改这些loops。 推荐大家阅读WP Codex上的文章运行中的The Loop,文章中列举了存档、类别以及单篇文章以及静态首页中的the loop。

WP Codex上the loop中也有一些在同一页面上放置多个loop的示例。 Perishable Press上有一篇关于多loop,多栏内容的精彩教程。 Perishable Press上还有一些很好的loop模板,以及一篇关于两栏水平序列文章的教程。

结论

只要掌握了一点这方面的知识,你就可以随意修改任何WordPress主题模板页面了。 现在你已经充分了解了WordPress的页面和the loop的运行,就可以征服任何难题了。 现在就开始你的博客主题设计之旅吧!

原文:How To: Hack WordPress Theme Template Pages
中文翻译:WordPress啦!

发表评论

电子邮件地址不会被公开。 必填项已用*标注