<?php the_content('Read the rest of this entry »'); ?>
WordPress运行中的The Loop(主循环):修订间差异
(新页面: <span style="border:1px solid #000; text-align:center; float:right; padding:6px;"><strong>导航:</strong> 上一页 | {{Template:WordPress导航}}</span> <div style="...) |
(→不同存档格式) |
||
第119行: | 第119行: | ||
<?php get_header(); ?> | <?php get_header(); ?> | ||
< div id="content" class="narrowcolumn"> | < div id="content" class="narrowcolumn"> | ||
<?php if (have_posts()) : ?> | <?php if (have_posts()) : ?> | ||
<?php while (have_posts()) : the_post(); ?> | <?php while (have_posts()) : the_post(); ?> | ||
<div class="post"> | < div class="post"> | ||
< h2 id="post-<?php the_ID(); ?>"> | < h2 id="post-<?php the_ID(); ?>"> | ||
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2> | <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2> |
2010年4月12日 (一) 17:03的版本
导航: 上一页 | 首页 | WordPress中文论坛 | WordPress主机 | CMS程序 | 论坛程序 | ECShop | ShopNC | PowerEasy
简介
“The Loop”是一个涉及WordPress主要进程的术语。用户可以在模板文件中使用The Loop为访问者显示文章。不使用The Loop也可以制作模板,但只能显示一篇文章的信息。
首先,WordPress检查所需文件是否都存在,然后搜集数据库博客管理者中定义的默认设置,包括每页显示的文章数量,是否准许评论,等等。默认设置成立后,WordPress将查看用户需求,并根据用户要求从数据库中调出相应文章。
若用户没有指定任何文章、类别、页面或时间,WordPress会根据之前搜集的默认值来决定为用户显示某篇文章。例如,若博客管理者在 管理面板>设置>阅读中设置每页显示五篇文章,然后WordPress将从数据库中获取五篇最新文章。若用户指定阅读某文章、类别、页面或时间,WordPress会根据用户要求从数据库中返回指定内容。
完成以上操作后,WordPress连接到数据库,检索指定信息并将结果存放在变量中。The Loop访问这个变量,利用变量值在模板中显示信息。
默认情况下,若访问者未指定文章、页面、类别或日期,WordPress用index.php显示所有信息。本文对The Loop的研究,首先放在index.php和用户博客的默认显示上。用户了解运行流程后,文章会对其他模板文件中的The Loop做进一步研究。
世界上最简单的索引页
以下是一个完整的函数索引,该函数索引根据The Loop的准备条件来显示每篇文章的内容(仅内容)。在这里显示函数索引的目的是让大家明白,函数在The Loop中的必要性微乎其微。在index.php中能充分发挥作用、保持The Loop良好运行状态的是CSS,HTML,以及PHP声明。
<?php get_header(); if (have_posts()) : while (have_posts()) : the_post(); the_content(); endwhile; endif; get_sidebar(); get_footer(); ?>
下面就来介绍这些保持The Loop良好运行状态的重要因素。
Loop默认用法
本段内容以WordPress 1.5标准安装程序下的“default”和“classic”主题为背景,循序渐进地介绍了The Loop的默认用法。
启动The Loop
默认index.php模板文件最上方就是WordPress主循环的起始代码。
<?php if (have_posts()) : ?>< br /> <?php while (have_posts()) : the_post(); ?>
- 代码首先判断是否有文章被have_posts()函数搜集。
- 如果有文章被搜集,启用PHP while 循环。只要圆括号中的条件没有逻辑错误,while循环会一直运行。因此只要have_posts()函数返回的值为真,The Loop就会一直运行下去。
- have_posts()函数检查是否还有搜集到的文章:有就返回true;没有则返回false。
生成文章
the_post()函数获取文章集合中的当前文章,激活该文章以便在The Loop循环中使用。如果没有the_post()函数,主题中很多模板标签都无法运行。
文章数据被激活后,模板就可以为访问者显示文章数据了。
标题,日期以及作者
用下面的模板标签获取文章的标题,发表时间和作者。
< h2 id="post-<?php the_ID(); ?>"> <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?></a>
< small><?php the_time('F jS, Y') ?>
文章内容
用模板标签the_content() 显示文章内容。这是文章穿过The Loop的重要环节:
如果在文章正文中添加一个名称为“more”的快速标签按钮,显示为,那么访问者只能看到带有下划线的正文部分。如果只希望在首页显示文章的前一两句话,将 插入文章第一行就能达到效果。
浏览单独一篇文章时,分隔符将被忽略。因此请在所有文章中插入[1]分隔符,这样访问者要阅读全文时就不得不点击进入单篇文章。
其他内容
在index.php模板文件中,每篇文章正文下方都留有空间显示文章相关信息,例如文章类别,时间以及评论内容。若访问者具有足够的用户权限(或文章作者),在文章meta数据版块中还会显示 “Edit This(编辑该文章)”链接,链接由edit_post_link()模板文件支持。
< p class="postmetadata"> Posted in <?php the_category(', ') ?> < strong>| <?php edit_post_link('Edit',,'|'); ?>
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?>
文章允许评论或已经有评论时,模板标签comments_popup_link()显示评论链接。使用评论弹出窗口时,链接会打开评论窗口;否则链接直接跳转到文章的评论内容。
访问者浏览文章索引时(若The Loop中有不止一篇文章),comments_popup_link()链接会将访问者导向文章具体页面。
自动发现trackback
模板标签trackback_rdf()为自动显示trackback输出计算机可读代码。
注意: trackback_rdf()标签应与注释码共同使用。
关闭The Loop
以下代码关闭The Loop。文章相关模板标签在The Loop关闭后不能正常运行(如果可以运行则使用The Loop最后一篇文章的相关信息)。这意味着,如果希望在The Loop中使用模板标签,需要预先将标签放入The Loop。
<?php endwhile; ?>
在The Loop被关闭后,下列代码展示了切换网页的导航控制。
< div class="navigation">
< div class="alignleft"><?php posts_nav_link(,,'« Previous Entries') ?> < div class="alignright"><?php posts_nav_link(,'Next Entries »',) ?>
若博客设置每页显示10篇文章,The Loop根据条件选择了25篇,那么就需要为三个网页做导航链接:前两个网页每页显示10篇文章,第三个网页显示5篇文章。访问者可以通过导航链接在这三个页面内任意切换。
导航控制存在于The Loop范围外if条件内,因此只在有文章时才能显示导航链接。导航函数本身也会根据当前循环查看是否有文章可供链接,然后根据文章显示导航链接。
<?php else : ?>
< h2 class="center">Not Found
< p class="center">
<?php _e("Sorry, but you are looking for something that isn't here."); ?>
另: have_posts()(从顶端起)为false时,从句决定下一步动作。也就是说,只有在The Loop中没有文章 时才能执行else后的语句。例如,若访问者查找某一时间但该时间范围内没有文章发表时,或搜索不返回任何结果时,页面上不显示文章。
<?php endif; ?>
这样就结束了“有文章时进行一种操作,没有文章则进行另一种操作”的条件检验。条件检验结束后,默认index.php模板中会包含侧边栏,最后将页脚也包括进去。
其他模板中的The Loop
WordPress可用不同模板文件将博客以不同方式展示给访问者。在WordPress默认主题中有索引视图的模板文件,类别视图的模板文件,还有一个可浏览具体文章的模板。每个模板都使用WordPress主循环,但在格式和模板标签的使用上又有一些差别。
WordPress对没有单独模板文件的视图默认使用index.php。如果访问者请求单独文章,WordPress首先寻找single.php文件。如果文件存在,则用文件向访问者显示文章,如果不存在,WordPress用index.php为访问者显示文章。这被称为模板层级。
制作自己的主题时,可以参考默认主题中的模板文件。将主题中的index.php作为其他模板文件的模板也有一定帮助效果。用户对相关内容和工作页面有所了解之后就可以创造出更多模板文件。
不同存档格式
存档中保存了所有历史文章。在默认用法中,显示在主索引上的文章都是时间上排在最近的文章。访问者点击存档链接或手动选择某一时间的存档文章(http://www.example.com/blog/index.php?m=200504 或http://www.example.com/blog/2005/04 ,选择2005年4月所有文章)后,WordPress显示存档视图。默认情况下,存档使用index.php文件,与主页版式相同,但只显示2005年4月的文章。
WordPress为访问者准备存档索引时,会在当前主题目录中仔细查找是否有一个名为archive.php的文件。如果不希望存档页面与主页版式相同,将index.php复制到archive.php并在必要时对archive.php进行编辑即可。
例如,如果用户希望只显示文章标题而不显示内容,可以再存档列表中使用如下代码:
<?php get_header(); ?> < div id="content" class="narrowcolumn"> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> < div class="post"> < h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a>
< small><?php the_time('F jS, Y') ?>
<?php endwhile; ?> < div class="navigation"> < div class="alignleft"> <?php posts_nav_link(,,'« Previous Entries') ?>
< div class="alignright"> <?php posts_nav_link(,'Next Entries »',) ?>
<?php else : ?>
< h2 class="center">Not Found < p class="center"><?php _e("Sorry, but you are looking for something that isn't here."); ?>
<?php endif; ?>
<?php get_sidebar(); ?> <?php get_footer(); ?>
不同类别
与准备存档索引相似,WordPress也会为分类索引查找一个单独模板文件。访问者点击博客中的类别链接时就会被导向到类别视图。WordPress为The Loop准备被选中类别中的文章,并将文章数量限制在博客默认的最大数量之内。
如果不希望类别视图与索引视图版式相同,可复制index.php并重命名为category.php。在类别视图中不必列出某篇文章所属的所有类别,因此可以将这部分内容删除,然后在页面上方声明类别。
<?php get_header(); ?> < div id="content" class="narrowcolumn"> < p> < strong> <?php single_cat_title('Currently browsing '); ?>
<?php echo category_description(); ?>
<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?>
< h2 id="post-<?php the_ID(); ?>"> <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a>
< small> <?php the_time('F jS, Y') ?>
<?php endwhile; ?> < div class="navigation"> < div class="alignleft"> <?php posts_nav_link(,,'« Previous Entries') ?>
< div class="alignright"> <?php posts_nav_link(,'Next Entries »',) ?>
<?php else : ?>
< h2 class="center">Not Found < p class="center"><?php _e("Sorry, but you are looking for something that isn't here."); ?>
<?php endif; ?>
<?php get_sidebar(); ?> <?php get_footer(); ?>