今天浏览了一下之前写过的wordpress文章,发现居然没有写wordpress模板中最核心也是最基础的东西:循环(the loop)。真是太失误了,掌握了wordpress循环,不仅对理解之前的文章有帮助,更重要的是对你设计主题以及修改主题都会起到很大的作用。从这一篇文章开始,我将对wordpress的循环机制做一个详细的介绍。
我们先从最基础的地方开始。在开始之前我想你应该对php有个了解或者对编程有点基础,比如知道程序的控制结构、变量等等。如果你对编程一窍不通,可能理解起来会有点困难,不过依葫芦画瓢也是可以的。
循环简介
在wordpress中,几乎每一个请求(比如首页的请求、查看某个分类下文章、查看某个标签下的文章、搜索等等),都会返回一系列的文章,通过循环对这些返回的文章进行遍历,可以把每一篇文章显示到屏幕上。
通过循环,你可以对文章进行有条件的过滤,或者针对不同的文章显示不同的样式
一个简单的循环
我们先写一个最简单的循环
<?php get_header(); if (have_posts()) : while (have_posts()) : the_post(); the_title(); endwhile; endif; get_footer(); ?>
就这么简单,如果这段代码写在index.php文件中,它就会显示出首页所有文章的标题(the_title()显示当前文章的标题),首页文章的数量和你在后台控制面板定义的每页显示的文章数量有关,比如你定义了每页显示10篇文章,这里就会显示最新的10篇文章的标题。
默认主题中的循环
空说无凭,我们通过wordpress自带的默认主题,来看一下wordpress是怎么处理循环的。
打开default主题文件夹下的index.php文件,我们可以找到下面这样一段代码
<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?>
这就是循环开始的地方,首先通过have_posts函数来判断当前的查询结果中是否包含文章,如果有文章就执行下面的while循环。while循环以have_posts为条件,当没有文章的时候(既已经遍历了所有的文章),就会跳出while循环。
在while循环内部,首先调用the_post函数,该函数的作用是把当前文章指向下一篇文章,每循环一次当前文章就会向前移动一步指向下一篇文章,这样才能保证整个循环的正常运转,直到当前文章指向了最后一篇文章,循环结束。可见,如果没有这个the_post函数,整个循环就是一个死循环,无限次的显示第一文章。
调用the_post之后,就可以通过调用wordpress的模板函数有选择的显示文章的内容,比如
- 文章标题 —— the_title()
- 文章链接 —— the_permalink()
- 文章发布时间 —— the_time()
- 文章内容 —— the_content()
- 文章分类 —— the_category()
- 文章标签 —— the_tages()
这些内容都是在while 和 endwhile 之间调用,所以接下来你可以看到
<?php endwhile; ?>
来结束循环。
另一种情况是查询结果中并没有任何文章,这个时候就会调用else之后的内容
<?php else : ?>
<h2><?php _e('Not Found', 'kubrick'); ?></h2>
<p><?php _e('Sorry, but you are looking for something that isn’t here.', 'kubrick'); ?></p>
<?php get_search_form(); ?>
最后是一条结束if判断的语句
<?php endif; ?>
这就是整个循环的过程,你可以在大部分的主题中看到这样的结构,为了更清楚的说明整个循环流程,我画了一张图

希望可以帮助理解。
John
2009-12-30 星期三 22:24
万戈
2009-12-31 星期四 08:37
DDBug
2009-12-31 星期四 09:16
vela
2009-12-31 星期四 10:03
m@rk
2009-12-31 星期四 10:56
xzm
2009-12-31 星期四 14:03
zhukun
2009-12-31 星期四 14:14