站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
WordPress:The Loop in Action
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的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> ==介绍== [[WordPress:The Loop|"The Loop"]]是指WordPress主程序中的一个术语。你可以在你的[[WordPress:Templates|模板文件]]中使用Loop来想访问者显示你的文章。你可以让模板不带有Loop,但这样你就只能显示来自一篇文章的数据了。 WordPress所做的第一件事就是检查它所需要的所有文件是否存在。接下来,它按照[[WordPress:Registered_User_Features|blog 管理员]]定义的,从数据库收集默认的设置。这包括每页显示的文章的数量,是否允许评论,等等。一旦这些默认的内容确定后,WordPress就会检查使用者要求什么。这个信息用来确定从数据库中取出哪篇文章。s 如果使用者不要求特定的文章,分类,页面或者日期,WordPress使用以前收集的默认值确定哪个文章准备给使用者阅读。例如,如果blog管理员在[[WordPress:Administration_Panels|Administration]] > [[WordPress:Administration_Panels#Reading|Settings]] > [[WordPress:Settings_Reading_SubPanel|Reading]]设置中选择每页显示5篇文章,那么WordPress就会从数据库中取最新的5篇。如果使用者要求特定的文章,分类,页面或者日期,那么WordPress就会根据这些信息来选择从数据库中取出哪篇''文章''。 一旦所有这些完成之后,WordPress就连接数据库,得到需要的信息,然后在一个变量中储存这个结果。进入这个变量的就是Loop,然后在模板中显示变量的值。 默认情况下,如果访问者没有选择特定的文章,页面,分类或者日期,WordPress会使用<tt>index.php</tt>显示所有内容。在这个Loop的讨论的第一部分,我们只集中讨论<tt>index.php</tt>,和默认的blog显示。接下来,一旦你懂得这些如何工作的时候,我们来研究Loop在别的模板文件中的作用。 ==世界上最简单的索引页面== 接下来的是具有所有功能的索引,可以显示每个文章的内容(仅仅是内容),根据使用情况准备Loop,给你看这些的唯一目的就是表明这些对Loop的技能几乎没有必要,在你的<tt>index.php</tt>文件大多数内容中,都是CSS, HTML,和 PHP声明,可以让Loop看起来漂亮些。 <pre> <?php get_header(); if (have_posts()) : while (have_posts()) : the_post(); the_content(); endwhile; endif; get_sidebar(); get_footer(); ?> </pre> ==默认 Loop== 接下来是一步一步的来看WordPress v1.5标准安装,默认情况下,''默认'' 和 ''经典''主题中loop用法。 === Loop开始=== 在默认<tt>index.php</tt>模板文件的顶部,是[[WordPress:The Loop|Loop]]代码开始的地方。 <pre><?php if (have_posts()) : ?><br /> <?php while (have_posts()) : the_post(); ?></pre> #首先它用<tt>have_posts()</tt>功能检查是否有新的文章. #如果有文章的话,一个PHP <tt>[http://www.php.net/while while]</tt>的loop就开始了。只要插入语为逻辑真,<tt>while</tt> loop就会继续执行。这样只要函数<tt>have_posts()</tt> 返回真值,Loop就会继续。 #函数<tt>have_posts()</tt>简单的在文章集合中检查下一个项目:如果有另外一个项目,返回true,如果没有下一个项目,返回false . ===生成文章=== <tt>the_post()</tt>函数把文章集合中的现用的项目拿出来,并且让它可以在Loop的循环中使用。如果没有<tt>the_post()</tt>,很多主题中使用的[[WordPress:Template Tags|模板标签]]都无法工作了。 一旦文章日期被设置可用,模板就能启用对来访者展示文章数据。 ====标题,日期和作者==== 下边的 [[WordPress:Template Tags|模板标签]]获得当前文章的标题,还有发表的时间和谁发表了它。 <pre> <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> <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small> </pre> ====文章内容==== <tt>[[WordPress:Template_Tags/the_content|the_content()]]</tt>模板标签显示文章的内容。 这是每个通过Loop的很重要的部分: <pre> <div class="entry"> <?php the_content('Read the rest of this entry &raquo;'); ?> </div> </pre> 如果你把'''more'''这个按钮包含到[[WordPress:Write_Post_SubPanel#Quicktags|Quicktag]],然后象这样<tt>[[WordPress:Customizing_the_Read_More|<!--more-->]]</tt>显示出来, 在你的文章的正文部分,只有<em>above</em>这部分才会显示给访问者。这样,如果你只是想让你的首页面显示每篇文章的第一句或者前两句话的话,只需要简单的在每篇文章的第一行之后插入 <tt><!--more--></tt>就可以了。 当查看某个单一的文章的时候,<tt><!-- more --></tt>分隔符会被忽略。这样如果读者想阅读全部内容,而又在所有的文章中都加如<tt><!-- more --></tt>分隔符的话,会迫使读者点击每个单独的文章。 ====详细资料附==== 在每个文章内容下边,在<tt>index.php</tt>模板文件中,是显示有关这个文章更多信息的地方,如分类,日期和评论信息。大家知道的[[WordPress:Post_Meta_Data_Section|文章meta数据部分]],如果你是一个已经登陆的有充分权限的使用者,你可会看见"Edit This"连接,这多亏了<tt>[[WordPress:Template_Tags/edit_post_link|edit_post_link()]]</tt>模板标签函数。 <pre> <p class="postmetadata"> Posted in <?php the_category(', ') ?> <strong>|</strong> <?php edit_post_link('Edit','','<strong>|</strong>'); ?> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p> </pre> 如果评论被激活,或者是该文章有评论内容,<tt>[[WordPress:Template_Tags/comments_popup_link|comments_popup_link()]]</tt>模板标签将会显示一个到评论内容的连接。如果你使用了[[WordPress:Template_Tags/comments_popup_script|评论弹出窗口]],这个连接就会打开评论窗口,否则它就会直接跳转到这篇文章的评论内容。 如果访问者在浏览文章索引(''i.e.:'' 在Loop中不止一篇文章),<tt>comments_popup_link()</tt>连接将会把读者连接到这篇文章的单独页面。 ====自动寻找Trackback ==== <tt>[[WordPress:Template_Tags/trackback_rdf|trackback_rdf]]</tt>模板标签的功能是输出机读代码用于自动寻找[[WordPress:Glossary#Trackback|trackback]]。 <pre> <!-- <?php trackback_rdf(); ?> --> </pre> '''注意:'''<tt>trackback_rdf()</tt>标签支持在自身旁边使用[[WordPress:Commenting_Code|评论]]。它并非"关闭"的。 ===结束 Loop=== 下面是结束 Loop。在这之后,各种文章相关的模板标签不再如如你想要的那样工作了(如果它们在工作,它们会使用Loop的最后一篇文章).这意味着,如果你需要使用一个工作'''在 Loop内'''的模板标签,你需要把如下语句放进去。 <pre> <?php endwhile; ?> </pre> 在这个部分,在Loop结束后立即通过每个网页显示出向前还是向后的导航控制。 <pre> <div class="navigation"> <div class="alignleft"><?php posts_nav_link('','','&laquo; Previous Entries') ?></div> <div class="alignright"><?php posts_nav_link('','Next Entries &raquo;','') ?></div> </div> </pre> 如果blog设置成每页显示10篇文章,而且Loop收集到了25篇文章,这就会产生三个页面:两个10篇文章的页面,还有一个五篇的页面。导航连接允许访问者通过文章收集跳转到上一页还是下一页。 导航控制是<em>不包含</em>在Loop内的,但是<em>包含在</em><tt>if</tt> 条件句内,这样它们只能显示是否有文章。导航函数本身也会检查是否有一些基于现有Loop的,它们能连接的内容,如果有可连接的内容的话只显示连接。 <pre> <?php else : ?> <h2 class="center">Not Found</h2> <p class="center"> <?php _e("Sorry, but you are looking for something that isn't here."); ?></p> </pre> <tt>else :</tt>语句决定了如果<tt>have_posts()</tt>返回false时做些什么。那就是说,'''else'''之后的部分只能在Loop没有文章时才会被显示。没有文章显示出来,举例来说,访问者要求某个特殊日子的内容,但是那天没有文章,或者是搜索但是没有结果。 <pre> <?php endif; ?> </pre> 这个语句结束了这样的条件句:"如果有文章这样,如果没有文章那样".一旦条件语句结束了,默认的index.php模板包括了边栏,最后是页脚。 ==其它模板中的Loop== WordPress可以使用不同的模板文件,用不同的方式显示你的blog。在默认WordPress主题中,有用于索引浏览的[[WordPress:Templates|模板文件]],分类浏览和文档浏览,就象一个浏览单独文章的模板。这些都会用到[[WordPress:The Loop|Loop]],但是这些都没有太大的差距,就象[[WordPress:Template_Tags|模板标签]]之间的不同用法似的。 至于那些没有分开的模板文件的情况,WordPress使用默认时的<tt>index.php</tt>。如果访问者请求阅读一个单独的文章时,WordPress会首先查找一个名字为<tt>single.php</tt>的文件。如果这个文件存在,它就会用来显示这个文章。如果不存在,WordPress就会使用<tt>index.php</tt>来显示文章。这叫做[[WordPress:Template Hierarchy|模板层次]]. 如果你正在制作你自己的[[WordPress:Using Themes|主题]],在默认主题中查看[[WordPress:Templates|模板文件]],作为参考,很有用。同样,使用你的主题的<tt>index.php</tt>作为你的其他模板文件的模板也是很有用的。因为你创建了更多的模板文件,这样做可能会带给你一个已知的工作页面,从这里开始作出更改。 ===不同的归档格式=== <em>archive</em>是历史文章的集合。在默认时,文章在主索引中显示的是最新的[http://mydatapages.com/chronological.html 按时间顺序的]记录。当访问者点击某个文档连接时,或者他们手动请求某个特定时间时,(使用<nowiki>http://www.example.com/blog/index.php?m=200504</nowiki>或者 <nowiki>http://www.example.com/blog/2005/04</nowiki> 来选择所有2005年4月后的文章),WordPress将显示<em>archive</em>内容。默认情况下,归档将使用<tt>index.php</tt>,然后和你的首页一样,只显示出2005年四月后的文章。 当WordPress为访问者准备[[WordPress:Creating_an_Archive_Index|归档界面]]时,它会在你现用的主题目录中明确的寻找一个叫做<tt>archive.php</tt>的文件,如果你想在首页上使归档的意思明确表达,那么把<tt>index.php</tt>复制到<tt>archive.php</tt>,并且按需求编辑<tt>archive.php</tt>文件。 例如,如果你只想在归档列表上显示文章标题,不包含文章内容,你可以使用如下代码: <pre> <?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></h2> <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small> </div> <?php endwhile; ?> <div class="navigation"> <div class="alignleft"> <?php posts_nav_link('','','&laquo; Previous Entries') ?> </div> <div class="alignright"> <?php posts_nav_link('','Next Entries &raquo;','') ?> </div> </div> <?php else : ?> <h2 class="center">Not Found</h2> <p class="center"><?php _e("Sorry, but you are looking for something that isn't here."); ?></p> <?php endif; ?> </div> <?php get_sidebar(); ?> <?php get_footer(); ?> </pre> ===不同的分类格式=== 和归档界面一样,WordPress为[[WordPress:Category_Templates|分类界面]]寻找分开的模板文件。如果访问者点击了一个分类连接,他们会看到分类外观,WordPress会只从分类中准备带有文章的Loop,限制每个blog默认设置下的文章的数目。 要想让你的分类界面和索引界面不同的话,复制一个<tt>index.php</tt>文件并重命名为<tt>category.php</tt>,对于分类界面,向一个分配过的文章列出分类也许不是必须的,所以我们忽略这一步。取而代之的,我们在页面顶部声明分类: <pre> <?php get_header(); ?> <div id="content" class="narrowcolumn"> <p> <strong> <?php single_cat_title('Currently browsing '); ?> </strong><br /> <?php echo category_description(); ?> </p> <?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></h2> <small> <?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --> </small> </div> <?php endwhile; ?> <div class="navigation"> <div class="alignleft"> <?php posts_nav_link('','','&laquo; Previous Entries') ?> </div> <div class="alignright"> <?php posts_nav_link('','Next Entries &raquo;','') ?> </div> </div> <?php else : ?> <h2 class="center">Not Found</h2> <p class="center"><?php _e("Sorry, but you are looking for something that isn't here."); ?></p> <?php endif; ?> </div> <?php get_sidebar(); ?> <?php get_footer(); ?> </pre> ===不同分类的不同格式=== 如在[[WordPress:Template Hierarchy|模板层次]]中叙述的,[[WordPress:Category_Templates|为每个分类创建分开的模板文件]]是可行的。只需要建立名字为<tt>category-<b><u>X</u></b>.php</tt>的文件,这里<b><u>X</u></b>是用数字表示的分类。仔细考虑你是否需要给某个分类建立全新的完整模板。 让我们来看两个分类,"Plants" 和 "Flowers",分类ID分别为3和4。在输出的地方的每个文章标题旁边,你都想要有个植物或者花的图片,取决于哪个分类被显示,你可以这样: * 使用两个分开的文件, <tt>category-3.php</tt> 和 <tt>category-4.php</tt>, 每个文件给每个文章标题使用不同的<tt>img</tt>标签。 * 在你的默认<tt>category.php</tt>文件中使用条件判断,来查看是否当前分类是"Plants"或者 "Flowers" (或者都不是), 然后显示合适的图片: <pre> <?php if (is_category('3') ): // we're in the Plants category, so show a plant ?> <img src='/images/plant.png' alt='a plant' /> <?php } elseif (is_category('4') ): // we're in the Flowers category, so show a flower ?> <img src='/images/flower.png' alt='a pretty flower' /> <?php endif; // end the if, no images for other other categories ?> </pre> 如果你添加了另外一个分类,"Cars",你想让它用一个<em>引人注目</em>的方式显示出来,那么一个分开的<tt>category-<b><u>X</u></b>.php</tt>则是你最合适的选择。 === 不同分类的不同CSS === 很多使用者想给特定的分类建立单独的CSS文件。这很容易实现。记住样式表是在HTML文件中的<tt><head></tt>部分定义并且加载的。WordPress使用<tt>header.php</tt>文件,在默认<tt>header.php</tt>文件中,找到下列语句: <pre> <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" /> </pre> And change it to something like this: <pre> <?php if ( is_category('5') ) { // Load special CSS for "Cars" category ?> <link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/category-5.css" type="text/css" media="screen" />; <?php } else { ?> <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" /> <?php } ?> </pre> <strong>注意:</strong> 汽车分类模板使用<tt>category-5.css</tt>文件取代默认版面。在这个例子中,CSS文件在应用的分类模板文件之后被命名,而不是真正的分类名。这样你就明白 <tt>category-5.css</tt> 是和<tt>category-5.php</tt>文件联系在一起的了. ===不同的单一文章格式=== 当浏览任意单一的文章(或者 [[WordPress:Glossary#Permalink|permalink]])的时候,如果有的话,WordPress会使用<tt>single.php</tt>。 在这个部分,在WordPress默认的single.php文件中,提供了有关当前文章的[[WordPress:Post_Meta_Data_Section|文章meta数据信息]]: <pre> <p class="postmetadata alt"> <small> This entry was posted on <?php the_time('l, F jS, Y') ?> at <?php the_time() ?> and is filed under <?php the_category(', ') ?>. You can follow any responses to this entry through the <?php comments_rss_link('RSS 2.0'); ?> feed. <?php if (('open' == $post->comment_status) && ('open' == $post->ping_status)) { // Both Comments and Pings are open ?> You can <a href="#respond">leave a response</a>, or <a href="<?php trackback_url(display); ?>">trackback</a> from your own site. <?php } elseif (!('open' == $post->comment_status) && ('open' == $post->ping_status)) { // Only Pings are Open ?> Responses are currently closed, but you can <a href="<?php trackback_url(display); ?> ">trackback</a> from your own site. <?php } elseif (('open' == $post->comment_status) && !('open' == $post->ping_status)) { // Comments are open, Pings are not ?> You can skip to the end and leave a response. Pinging is currently not allowed. <?php } elseif (!('open' == $post->comment_status) && !('open' == $post->ping_status)) { // Neither Comments, nor Pings are open ?> Both comments and pings are currently closed. <?php } edit_post_link('Edit this entry.','',''); ?> </small> </p> </pre> 这种信息—不论评论是公开还是关闭—是相当不适合放在一个索引上,归档或者分类界面的;那也是为什么只包含在<tt>single.php</tt>模板文件中的原因。 ==其他Loop技巧== 既然你已经对WordPress Loop的基本使用有了一个全面的了解,我们开始介绍更多的Loop效果和技巧。 ===静态首页=== 你如何显示一些blog中特别的<em>仅仅</em>存在于你的首页上的东西呢?对,就是只在你的首页或者主页上的,站点上别的任何地方都看不到的。简单!我们把这称为''静态首页''。站点的首页并不真的是静态的。它只是使用了Loop让它看起来如此罢了。 想让这个Loop技巧实现,使用[[WordPress:Conditional_Tags#The_Main_Page|is_home()]]条件式模板标签函数。 在你的 <tt>index.php</tt>, 使用<tt>if ()</tt> 条件句来有条件的输出附加内容: <pre> <?php get_header(); ?> <?php if (is_home()) { // we're on the home page, so let's show a picture of our new kitten! echo "<img src='/images/new_kitty.jpg' alt='Our new cat, Rufus!' />"; // and now back to our regularly scheduled home page } ?> </pre> 如果访问者请求某个具体文章,页面,分类或者日期时,函数<tt>is_home()</tt>不会产生真值,这样它只显示在"主"页上。 参见[[WordPress:Creating a Static Front Page|创建一个静态首页]]以获得更多信息。 ===只显示摘录=== 显示摘录而不是全文的最简单的方法,把所有的<tt>[[WordPress:Template_Tags/the_content|the_content]]()</tt>实例用<tt>[[WordPress:Template_Tags/the_excerpt|the_excerpt()]]</tt>代替,如果你没有建立你的文章的外部摘录,这个函数将自动的显示文章的前120个词。 <pre> <div class="entry"> <?php the_excerpt(); ?> </div> </pre> ===显示摘录或者全部文章取决于文章编号=== 某些情况下,如在文档页面上,如果只有一篇文章的话你可能想显示全部的内容,或者有多篇文章显示摘录。你可以自定义Loop来实现。 <pre> <?php if (have_posts()) : ?> <?php if (($wp_query->post_count) > 1) : ?> <?php while (have_posts()) : the_post(); ?> <!-- Do your post header stuff here for excerpts--> <?php the_excerpt() ?> <!-- Do your post footer stuff here for excerpts--> <?php endwhile; ?> <?php else : ?> <?php while (have_posts()) : the_post(); ?> <!-- Do your post header stuff here for single post--> <?php the_content() ?> <!-- Do your post footer stuff here for single post--> <?php endwhile; ?> <?php endif; ?> <?php else : ?> <!-- Stuff to do if there are no posts--> <?php endif; ?> </pre> ===不同的页眉/边栏/页脚=== WordPress在[[WordPress:Templates|模板文件]]中提供<tt>get_header()</tt>,<tt>get_sidebar()</tt>, 和<tt>get_footer()</tt> 几个[[WordPress:Include Tags|包含标签]]使用。这些函数让定义标准的页眉/边栏/页脚更加简单。任何对这些文件的改动会立刻显示给访问者,你不用做任何工作。 有时你可能不<em>想</em>要边栏。如果你不想要边栏,只需简单的把<tt>get_sidebar()</tt>函数的调用从模板中删除。如,WordPress 默认主题中的模板不包括<tt>single.php</tt>。 建立你自己的<strong>不同的</strong> 边栏,你有两种选择。 # 把边栏内容直接包含到你正在操作的模板文件中。如果你想要category-3 拥有不同的边栏, 编辑<tt>category-3.php</tt>,把必须的HTML和PHP代码包含进去来生成这个唯一的边栏。 # 使用PHP的<tt>[http://www.php.net/include 包含]</tt> 函数, 来包含另外一个文件。 WordPress <tt>get_sidebar()</tt> 函数 <em>只</em> 加载<tt>sidebar.php</tt>. 如果你有个文件名为<tt>sideleft.php</tt>, 你可以象这样把它涵盖进去:: <pre> <?php include(TEMPLATEPATH . '/sideleft.php'); ?> </pre> 使用WordPress默认的[[WordPress:Template Hierarchy|模板层次]],如果你想在多个或者不同的模板中使用相同的元素,你最好把它们放到分开的模板文件中,并使用PHP<tt>include()</tt>函数。如果这个你添加的元素是特别为某一模板使用的,最好是把它直接包含到那个模板中去。 ==概要== 我们刚才简单说了下我们使用Loop能做些什么。作为提醒,下边的内容可能会帮助你自定义你自己的[[WordPress:The Loop|WordPress Loop]]。 * [[WordPress:Templates|模板文件]] * [[WordPress:Template Tags|模板标签]] * [[WordPress:Template Hierarchy|模板层次]] * [[WordPress:Conditional Tags|条件式标签]] ==资源== * [http://www.obeattie.com/2006/05/02/wordpress-the-loop/ oBeattie : The Loop] * [http://www.themelab.com/2008/04/04/the-ultimate-guide-to-the-wordpress-loop/ WordPress Loop终极指南]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:WordPress导航
(
查看源代码
)(受保护)