众所周知循环可以算得上是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 主要的循环结构拿出来分析一下,这样大家就会有个清晰的认识!功能都标记好了!
下面是一个简单的总结,有三种方式来定义循环功能:
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!
感谢伟大的原作者:http://www.wondercss.com/2013/wordpress/1777/