WonderCSS

边做边学,了解 WordPress 的日志循环结构 Loop

众所周知循环可以算得上是wordpress的主要核心之一,当你了解了循环的真正原理后,你就可以用它来循环出你想要的文章列表或是某一篇文章,你也可以让文章出现在任意你想要出现的地方!下面是wordpress 循环的基本结构,其实也不是很复杂~


<?php   
// The Loop    
if (have_posts()) : while (have_posts()) : the_post();   
...   
endwhile; else:   
...   
endif;   
?>

在标准的php编程语言当中while就是如果指定的条件成立,则循环执行代码块,那么在wordpress中也是同样的原理。 if (have_posts()) : while (have_posts()) : the_post(); 大致意思是这样首先要确保如果有文章的情况下将执行the_post()函数,即wordpress内部的循环功能!如果have_posts() turns to false 的话 那么循环将终止!

下面我们把wordpress 主要的循环结构拿出来分析一下,这样大家就会有个清晰的认识!功能都标记好了!

wordpress-loop-introduction

下面是一个简单的总结,有三种方式来定义循环功能:

query_posts()

如果您使用的是单循环,只想定义某一篇文章或者某一类栏目的文章,使用query_posts()返回的类型。这是一种简单有效的循环方式~

WP_Query()

如果想拥有一个功能强大的,拥有可自定义的多种循环方式,那么你可以尝试使用WP_Query()。设立的其他实例的WP_Query()在你的主题模板,你可以创建任意数量的多个循环方式,并且可以自定义每个输出。

get_posts()

最后一个函数是使用简单的get_posts()函数,它可以在你的主题中轻松地创建任何其它循环。 get_posts()接受与query_posts()相同的参数,并添加自定义的循环,它可以出现在你的侧边栏,页脚,或其他任何地方,并使你的主题变得更加完美。

使用query_posts()函数自定义循环!

WordPress默认的循环通常看起来像这样:


<?php  // The WordPress Loop 
if (have_posts()) : while (have_posts()) : the_post();   
...   
endwhile; else:   
...   
endif;
?>

这个循环后显示的信息取决于许多因素,包括请求的URL和相应的主题模板,用于生成页面。这里仅显示主题中默认的文章类别!但是当我们想在页面的某一个地方显示某一指定类别的文章,即排除其余的类别的话!使用query_posts()函数将会变得非常的简单。

假设我们只想除了cat标签等于9以外的文章类别时,我们可以这样写!


<?php
query_posts('cat=-9'); // 排除category (tag_ID = 9)
if (have_posts()) : while (have_posts()) : the_post();   
...   
endwhile; else:   
...   
endif;
?>

如果我们希望查询函数能够重置修改的话,我们可以尝试这样来定义!


<?php
global $query_string; // 定义全局查询信息
$posts = query_posts($query_string.'&cat=-9'); // 排除相应的category,文章类别 
if (have_posts()) : while (have_posts()) : the_post();   
...   
endwhile; else:   
...   
endif;   
wp_reset_query(); // 重置 query  函数
?>

有了上述自定义循环结构我就可以很容易的进行修改,例如我们可以对一些参数进行额外的限制!


$posts = query_posts($query_string.'&cat=-7,-8,-9&posts_per_   
page=3');

这里我们添加了排除cat ID 等于7,8,9的文章类别,并且只显示3条记录!

强大的 WP_Query() 函数

在许多情况下,你可能想保留原来的查询,只调整某些参数。要做到这一点,可以使用WP_Query设置下面的循环结构:


<?php
$custom_query = new WP_Query('cat=10&showposts=10&paged='.$paged);   
while($custom_query->have_posts()) : $custom_query->the_post();   
...   
endwhile;   
next_posts_link('« Older Entries');   
previous_posts_link('Newer Entries »');   
wp_reset_postdata(); // 重置  query 函数 
?>

提示:$custom_query = new WP_Query(‘showposts=10&paged=’.$paged);这里指定显示十篇文章,如果将showposts=-1的话将遍历出所有的文章。

另一个有实用的WP_Query()循环方法是可以指定循环出相应分类栏目标题中的文章!例如:


$custom_query = new WP_Query('pagename=news&paged='.$paged); //循环出news(新闻)分类栏目中的文章

下面我们来看一下关于使用WP_Query()循环方法的一些简单的例子!


/* 从CatID为7的分类中取出3篇文章 */
new WP_Query(
'cat=7&showposts=3'
); 


/* 从非CatID为7的分类中取出5篇文章 */
new WP_Query(
'cat=-7&showposts=3'
); 


/* 从非CatID为7的分类中取出5篇文章,并跳过前5篇 */
new WP_Query(
'cat=-7&showposts=3&offset=5'
); 

自定义循环get_posts()

如果你想在自己的主题中创建多个简单且安全的循环方式,那么你可以使用get_posts()你只需要的地方创建一个额外的,自循环,只需添加以下代码:


<?php // additional loop via get_posts
global $post;   
$args = array('category' => -9); // 排除指定类别
$custom_posts = get_posts($args);   
foreach($custom_posts as $post) : setup_postdata($post);   
...   
endforeach;   
?>

但是请注意,该get_posts需要一个数组作为参数时。可以参考以下格式:


$args = array('category'=>-7,-8,-9, 'numberposts'=>3, 'order'=>'ASC');

这里限制文章数目使用的是’numberposts’=>3,而不是posts_per_page!

By 于湛 发布于 2013.11.4 2,681 次浏览

发表评论

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