站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
WordPress:The Loop
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
<span style="border:1px solid #000; text-align:center; float:right; padding:6px;"><strong>导航:</strong> [[WordPress:WordPress文档|上一级]] | [[WordPress]] | {{Template:WordPress导航}}</span> <div style="clear:both;"></div> __TOC__ WordPress使用'''Loop'''来显示你的每一篇文章。使用Loop,WordPress将每篇文章显示在当前的网页上,并且根据它们怎样匹配Loop标签内部规定的标准来规定它们的形式。Loop中放置的任何的[[WordPress:Glossary#HTML|HTML]]或者[[WordPress:Glossary#PHP|PHP]]代码会在每篇文章中重现。当WordPress文件申明"这个标签必须在 Loop中",例如特别的[[WordPress:Template Tags|模板标签]]或者插件,标签对于每篇文章都会重复。 例如,在信息中,Loop对于每篇文章的在WordPress1.5中的显示是:标题 (<tt>[[WordPress:Template Tags/the_title|标题()]]</tt>), 时间 (<tt>[[WordPress:Template Tags/the_time|时间()]]</tt>), 和类别 (<tt>[[WordPress:Template Tags/the_category|类别()]]</tt>) 关于每篇文章的其他信息能用适当的[[WordPress:Template Tags|标签]]或者通过<tt>$post</tt>的变量(为高级使用者的)来展示,当Loop正在运行的时候, <tt>$post</tt> 变数是由当前文章的信息设置的 对于一个新手,看看Loop,请看[[WordPress:The Loop in Action|活动的Loop]]。 == 使用 Loop == Loop应该被放在<tt>index.php</tt>和其它的任何惯于显示文章信息的模板中,但是根据你使用WordPress版本的不同,Loop看起来可能还会有所不同。你应该首先看看"[[WordPress:WordPress_Versions#Finding_your_version|你拥有的WordPress是哪一个版本]]"。 === WordPress 2.0 === 这(可能)与WordPress 1.5是相同的 === WordPress 1.5 === 要确定包含了对于你的[[WordPress:Theme Development|主题]]的模板的顶上方的页眉模板的访问。如果你在自己的设计内部使用了Loop(而且你自己的设计不是一个模板),将<tt>WP_USE_THEMES</tt>设置为<tt>false</tt>。 <pre><?php define('WP_USE_THEMES', false); get_header(); ?></pre> Loop从这儿开始:: <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 而且从这儿结束: <?php endwhile; else: ?> <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> <?php endif; ?> === WordPress 1.2 === 要确定在你的索引页的上方包含了对于wp-blog-header.php的访问。记住,wp-blog-header.php的路径必须设置到你的wp-blog-header.php文件的位置: <?php /* 不要移除这一行。 */ require('./wp-blog-header.php'); ?> Loop从这儿开始: <?php if ( $posts ) : foreach ( $posts as $post ) : start_wp(); ?> 从这儿结束: <?php endforeach; else: ?> <p><?php _e('对不起,没有文章匹配你的标准。'); ?></p> <?php endif; ?> == Loop例子 == === 从一些类别中不同地设计文章=== ''只针对 WordPress v1.5'' 这个例子,使用[[#WordPress:WordPress1.5 针对1.5版本的语法]],显示了每篇文章和文章标题(用作对于文章的[[WordPress:Using Permalinks|Permalink]]的一个链接),类别和内容。这是一个简单的,梗概的例子;或许你的模板会稍微地显示更多的信息,使设计[[WordPress:Glossary#CSS|CSS]]变得更加地简单。 虽然为了更具有一些教育性,但是这个例子允许类别中类别ID'3'的文章,设计得不同。要实现这一点,可以使用<tt>[[WordPress:Template Tags/in_category|在类别中()]]</tt> [[WordPress:Template Tags|模板标签]]。 <tt><nowiki><!-- --></nowiki></tt>标签是HTML评论标签;如果你使用这个例子,这些标签就不会在网络浏览器中显示。它们除了注释下面的代码以外,什么作用也不起。 <nowiki> <!-- Start the Loop. --> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <!—下面的内容测试了当前的文章是否在类别3中。--> <!—如果是的话, div 框被赋予了 CSS级别 "post-cat-three". --> <!—否则的话, div 框 就会被赋予 CSS 级别 "post". --> <?php if ( in_category('3') ) { ?> <div class="post-cat-three"> <?php } else { ?> <div class="post"> <?php } ?> <!—显示标题为一个对于文章的permalink的链接。--> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <!—显示时间。 --> <small><?php the_time('F jS, Y'); ?></small> <!—在一个div框中显示文章的内容。--> <div class="entry"> <?php the_content(); ?> </div> <!—显示文章类别的一个以逗号分开的列表。--> <p class="postmetadata">Posted in <?php the_category(', '); ?></p> </div> <!-- closes the first div box --> <!—停止 Loop (但是注意 "else:" – 看下一行). --> <?php endwhile; else: ?> <!—第一个"如果" 测试看看有没有文章到 --> <!—显示。这个 "其它的"部分说明了,如果没有文章的话,要做什么。 --> <p>对不起,没有文章能够符合你的标准。</p> <!—真的吗 停止 Loop. --> <?php endif; ?></nowiki> '''注:'''任何你想使用[[WordPress:Glossary#HTML|HTML]]代码的时候,你''必须''在<tt><?php ?></tt>标签的外面。[[WordPress:Glossary#PHP|PHP]]代码(甚至向花括号这样简单的东西:<tt>}</tt> )''必须''在<tt><?php ?></tt>标签内部。就如以上的例子所显示的那样,你可以开始并结束PHP代码,甚至在<tt>if</tt> 和 <tt>else</tt>声明中散布HTML代码。 === 从某个类别中清除文章 === ''从WordPress v1.5 和更高的版本'' 这个例子可以用来,清除某个显示的类别。这个以例子[[#WordPress:Style Posts From Some Category Differently|以上的]]为基础。 <nowiki> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <!—如果文章在我们想要删除的类别中,我们只要转向下一篇文章。--> <?php if (in_category('3')) continue; ?> <div class="post"> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <small><?php the_time('F jS, Y'); ?></small> <div class="entry"> <?php the_content(); ?> </div> <p class="postmetadata">Posted in <?php the_category(', '); ?></p> </div> <!-- closes the first div box --> <?php endwhile; else: ?> <p>对不起,没有文章符合你的标准。</p> <?php endif; ?></nowiki> '''注''': 如果你对主页使用这个例子,你应该为你的类别归档使用一个不同的[[WordPress:Templates|模板]]。否则的话,甚至在浏览类别归档时,WordPress会删除类别3中的所有文章, 然而,如果你想要使用同一个模板文件的话,你可以使用<tt>is_home()</tt>标签来避免这个: ... <?php if (in_category('3') && is_home() ) continue; ?> ... 这个会确保类别3中的文章,只会在主页中清除。也有其它的[[WordPress:Conditional Tags|条件式标签]]可以用来控制输出,取决于关于一个访问的网页,一个特别的条件是不是真的。 请注意即使文章并没有显示,它仍然会被WordPress计算为正在显示的—这意味着,如果你将WordPress设置为显示最多七篇文章,而且七篇中最后的两篇是属于类别3中的,那么你在主页上只会显示五篇文章。如果对于你来说,这是个麻烦事,你可以使用[[WordPress:FAQ Layout and Design|布局和设计 常见问题解答]]上更加复杂的插件,如果你只需要在loop上删除一个类别的话,你可以使用[[WordPress:Template_Tags/query_posts | 查询 文章]] ==多个 Loop== 这个部分处理的是Loop的高级使用。这有一定的技术性- 但不要因为这个而恐慌。我们会从简单的地方开始,并且逐步向难的方向发展。有一点的常识,耐心,和热情,你也可以使用多个loops。 首先,<b>"为什么要使用多个loops?"</b>一般来说,答案是你可能对一组文章想<i>这样</i>处理,对另一组文章想<i>那样</i>处理,<u>但要在同一个网页上显示这两篇文章</u>。那样,可能并不意味着什么,你只是受你的PHP技术和你的想象力的限制。 我们可能会进入上面的例子,但是首先你应该阅读基本知识。看看基本的Loop。它的组成是: <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <!-- do stuff ... --> <?php endwhile; ?> 上述的会在英文中阅读(PHP形式和人们熟悉代码表述的可以跳到下面):如果我们要显示文章,就一次一篇。对于列表中的每一篇文章,根据<tt><!-- do stuff ... --></tt>显示它。当你点击最后一篇文章时,就停止。<tt>do stuff</tt> line(s),是随模板而定的。 在旁边的<tt>Do stuff</tt>上:在这个例子中,它只是一些怎样规定网页上文章的形式和显示的代码的占位符。根据你希望你的WordPress站点是怎样显示的,这个代码会更改。如果你看了Kubrick主题的 index.php the <tt>do stuff</tt>部分,会有以下的东西: <?php while (have_posts()) : the_post(); ?> 上面的: <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?> 编码器在那儿的一个解释: <tt>have_posts()</tt>和<tt>the_post()</tt>是全局的<tt>$wp_query</tt>物体有用的包装材料,这是所有活动的地点。可以在博客页眉中访问<tt>$wp_query</tt>。你可以博客页眉中访问<tt>$wp_query</tt> 而且以来自<tt>GET</tt> and <tt>PATH_INFO</tt>的询问论据为支撑。<tt>$wp_query</tt>接受争论,并且建立和执行一个以一批文章为结果的DB询问。这个数组在一个对象中储存,而且也会返回到博客页眉中,在这里, 它塞满了全局<tt>$posts</tt>数组(关于旧的文章loops的向后兼容)。 一旦WordPress停止了载入博客页眉,并且下降到模板中,我们便到达了我们的文章Loop上。<tt>have_posts()</tt>只是访问到<tt>$wp_query->have_posts()</tt>,这个检查loop计数器,来看看在文字排列中有没有剩下任何文章。而且<tt>the_post()</tt>访问<tt>$wp_query->the_post()</tt>,会升级loop计数器,和设置全局的<tt>$post</tt>变数,以及所有的全球的文章数据。我们一旦耗尽了loop, <tt>have_posts()</tt>就会返回错误,我们完成了。 ==== Loop 例子==== 下面是使用多个loops的两个例子。使用多个loops的关键是<tt>$wp_query</tt>只能被访问一次。要传播这个,通过访问<tt>rewind_posts()</tt> 或者通过创建一个新的查询对象,有可能再次地使用查询。这个在例1中说明了。在例2中,包含用一个变数来储存一个查询的结果。例3说明了使用<tt>update_post_caches();</tt>功能来避免常见的插件问题。最后,‘多个运转的 loops’将许多的观点集中在一起,来一方面说明使用多个loop来提升你的博客主页上的某个类别中的文章。 =====多个 Loops 例子 1===== 为了第二次在同一个询问中loop,访问<tt>rewind_posts()</tt>。这样就会重新设置loop计算器,允许你做另一个loop。 <?php rewind_posts(); ?> <?php while (have_posts()) : the_post(); ?> <!-- Do stuff... --> <?php endwhile; ?> 如果你完成了最初的查询中的文章,你想要使用一个不同的查询,你可以通过访问<tt>query_posts()</tt>再次地使用<tt>$wp_query</tt>对象,然后''looping back''。<tt>query_posts()</tt>会执行一个新的查询,创建一个新的文章列,并且重新设置loop计算器。 // 在一个特别的_cat 类别中得到最后的十篇文章。 <?php query_posts('category_name=special_cat&showposts=10'); ?> <?php while (have_posts()) : the_post(); ?> <!-- Do special_cat stuff... --> <?php endwhile;?> 如果你需要保存原来的查询,你可以创建一个新的查询对象。 <?php $my_query = new WP_Query('category_name=special_cat&showposts=10'); ?> <?php while ($my_query->have_posts()) : $my_query->the_post(); ?> <!-- Do special_cat stuff... --> <?php endwhile; ?> 使用了查询对象<tt>my_query</tt>因为你不能使用全局的<tt>have_posts()</tt> 和 <tt>the_post()</tt>因为它们都使用<tt>$wp_query</tt>。 =====多个Loops 例2===== 使用多个Loops的另一个版本,对于不能使用<tt>have_posts()</tt> 和 <tt>the_post()</tt>采取了另一个方针。为了解决这个问题,你应该在一个变数中储存原始查询,当针对另一个Loop时,需要重新地提交查询。这样做,你可以使用所有依赖于全球性的标准功能。 例如: // 独自从这儿离开 <?php $temp_query = $wp_query; ?> <!-- Do stuff... --> <?php query_posts('category_name=special_cat&showposts=10'); ?> <?php while (have_posts()) : the_post(); ?> <!-- Do special_cat stuff... --> <?php endwhile; ?> // 现在返回到我们有规律的规划<?php $wp_query = $temp_query; ?> '''注:''' 在 PHP 5中,对象以操作员为参考,而不是向在php4中那样的复制的。使例2能在PHP5中运行,你需要使用以下的代码: <pre> // 自己离开来到这儿 <?php $temp_query = clone $wp_query; ?> <!-- Do stuff... --> <?php query_posts('category_name=special_cat&showposts=10'); ?> <?php while (have_posts()) : the_post(); ?> <!-- Do special_cat stuff... --> <?php endwhile; ?> // 现在返回到我们正常规定的项目 <?php $wp_query = clone $temp_query; ?> </pre> 然而,第二个例子不能在WordPress 2.1中运行。 =====多个 Loops 例 3 – 插件===== 经发现许多的插件并不能与多个loops合作。在这些情况下,经发现,许多的处理文章的关键词和标签的插件,只对文章第一个包含全部文章的子集的一个loop起作用。如果你发现这是一个问题,你可能想要尝试一下添加了<tt>update_post_caches($posts)</tt>功能的基本的loop在以下的执行情况。这个功能重新设置了文章高速缓存,而且至今没有被证明。只有第一个loop重新得到一个文章的子集,才会执行第二个loop。 仅仅修改: <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <!-- Do stuff... --> <?php endwhile; ?> 变成: <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); update_post_caches($posts); ?> <!-- Do stuff... --> <?php endwhile; ?> ====运转的多个Loops ==== 了解怎样使用多个loops的最好的方法,就是显示一个多个loops的使用的一个例子。也许多个loops最常用的就是在一个网页上显示两个(或者更多的)文章列表。当一个WEB站点管理员不仅想要显示最近所写的文章,还想要显示属于某一类别的文章的时候,便要用到这个。 将所有的形式和CSS问题放到一边,假如我们只想要文章的两个列表。一个会列出最近的文章(最近添加的10个标准的文章),另一个列表只会包含一个来自类别‘特色的’文章。属于‘特色的’类别里的文章应该首先显示,紧跟着,第二个文章的列表(标准的)。<b> 所获得的是没有一篇文章同时出现在两个类别中。</b> <b>第一步.</b> 从‘有特色的’类中,只拿出一篇文章。 <?php $my_query = new WP_Query('category_name=featured&showposts=1'); while ($my_query->have_posts()) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?> <!-- Do stuff... --> <?php endwhile; ?> 在英文中,上述的代码会读作: 将<tt>$my_query</tt>设置为与类别是特色的里的所有文章的查询结果相同,顺便说一下,只给我一篇文章。也将变数<tt>$do_not_duplicate</tt>设置为与返回的单个文章的ID数字相等。记起,<tt>Do stuff</tt>行代表了所有的与重新得到的文章相关的格式的选项。 注意我们需要下一步中的<tt>$do_not_duplicate</tt>值,以确保相同的文章没有在两个类别中重复出现。 <b>第二步</b>. 第二个loop,得到了X篇最新的文章(除了一篇)。 下面的代码得到了最新的X篇文章(如WordPress参数选择中所定义的那样),保存了已经在第一个loop中显示的那一篇,并且根据<tt>Do stuff</tt>显示它们。 <?php if (have_posts()) : while (have_posts()) : the_post(); if( $post->ID == $do_not_duplicate ) continue; update_post_caches($posts); ?> <!-- Do stuff... --> <?php endwhile; endif; ?> 在英文中,以上的代码会读作: 得到所有的文章,在文章等于<tt>$do_not_duplicate</tt>的位置,什么措施也别采取,否则的话,根据<tt>Do stuff</tt>显示所有的其它的文章。而且,更新高速缓存,这样标签和关键词会运行的很好。记住,<tt>$do_not_duplicate</tt>参数包含了已经显示的文章的ID. <b>最后的结果</b> 以下是最后的代码是怎样显示的<u>without any formatting</u>: <?php $my_query = new WP_Query('category_name=featured&showposts=1'); while ($my_query->have_posts()) : $my_query->the_post(); $do_not_duplicate = $post->ID;?> <!-- Do stuff... --> <?php endwhile; ?> <!-- Do other stuff... --> <?php if (have_posts()) : while (have_posts()) : the_post(); if( $post->ID == $do_not_duplicate ) continue; update_post_caches($posts); ?> <!-- Do stuff... --> <?php endwhile; endif; ?> 最后的结果是一篇文章有两个列表。第一个列表只包含了一篇文章—来自'特色'的最近的文章。第二个列表会包含X篇最近的文章(如WordPress参数中所定义的)<i>except</i>已经在第一个列表中显示的文章。因此,一旦特色文章被另一个代替了,前一个特色文章就会在下面的标准的文章列表中显示(这取决于你选择显示多少篇文章和文章的频率)。这种方法(或者相似的)由许多人使用,与[http://codex.WordPress.org/Template_Hierarchy 模板层级]的知识想结合,为home.php 和 index.php创建不同的外观。在这一个页面的底部看看相关的资源。 <h3>原始资料:</h3>这篇关于多个loops的文章是[http://boren.nu Ryan Boren]和 [http://www.alexking.org Alex King's] 的结合体。 http://comox.textdrive.com/pipermail/hackers/2005-January/003578.html 讨论]关于[[WordPress:Mailing Lists#Hackers|Hackers Mailing List]]上的loops以及在[http://www.maxpower.ca/wordPress-hack-sticky-adhesive-kubrick/2005/05/03/ MaxPower]上所写的指南。 ==更多的 Loop 资源== 学习更多的WordPress Loop, 以及只在Loop内部运行的不同的模板,这儿有一些资源。 * [[WordPress:The Loop in Action|运转的Loop]] * [[WordPress:Template Tag|模板标签]] * [[WordPress:Templates|在模板文件中使用Loop]] ===资源=== * [http://mattread.com/archives/2005/04/wordpress-is-not-php/ Matt 阅读Loop 文章] * [http://www.maxpower.ca/wordPress-hack-sticky-adhesive-kubrick/2005/05/03/ MaxPower Dynamic Sticky 指南] * [http://shaunandrews.com/2006/07/14/wordpress-sticky-posts/ Shaun Andrews' Sticky 消失几天后的文章] * [http://www.ifelse.co.uk/archives/2005/04/08/query_posts-redux/ IfElse Query_post Redux] * [http://www.optiniche.com/blog/15/the-wordpress-loop-and-adding-content-outside-of-it/ Loop并且在它的外面添加内容] * [http://rhymedcode.net/1001-wordpression-loops/ 1001 WordPression Loops] * [http://weblogtoolscollection.com/archives/2007/06/06/global-variables-and-the-wordpress-loop/ 全程变量和 WordPress Loop] * [http://perishablepress.com/press/2006/11/22/perishable-press-triple-loop-for-wordpress/ WordPress Triple Loop 指南] * [http://perishablepress.com/press/2007/08/06/super-loop-exclude-specific-categories-and-display-any-number-of-posts/ 超级的 Loop: 清除列表和现在文章篇数] * [http://perishablepress.com/press/2007/11/14/easily-adaptable-wordpress-loop-templates/ 容易适应的 WordPress Loop 模板: 基本的Loops, Mullet Loops,以及更多的] {{Copyedit}}
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:Copyedit
(
编辑
)
模板:WordPress导航
(
查看源代码
)(受保护)