自从wordpress 2.5 之后,wordpress增加了一些功能,其中就包括显示随机文章,使用起来也很方便,看代码

<ul>
<?php query_posts('showposts=5&orderby=rand'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; endif; ?>
</ul>

这段代码的功能就是以列表的形式随机显示5篇文章的标题。其实就是调用了query_posts()函数来自定义我们的查询语句,其中showposts参数决定文章数量,orderby决定显示顺序,我们让orderby=rand就可以实现随机的效果。

使用这种方法有些问题需要注意,query_posts覆盖了原始的查询语句,不能把这段代码插入到其它的循环中。如果你对wordpress的循环机制不是很了解,使用这种方法就需要谨慎。在进行多循环查询的时候,这种方法可能会影响到其它查询。

为了解决可能对其它循环体的影响,我们可以在查询随机文章之前先备份一下原始原始查询语句,然后再复原,代码如下:

<ul>
<?php $temp_query = clone $wp_query; ?>
<?php query_posts('showposts=5&orderby=rand'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; endif; ?>
<?php $wp_query = clone $temp_query; ?>
</ul>

在这段代码中,我们首先把原始的查询变量$wp_query复制给临时变量$temp_query。当我们在进行随机查询的时候,全局变量$wp_query已经改变。在循环结束之后,再把之前保存的$temp_query复制给$wp_query,此时$wp_query就仍然是先前的原始查询语句了。

另外一种方法是新建一个查询变量,这样就不会覆盖原始的查询变量$wp_query。具体代码如下:

<ul>
<?php $rand_query = new WP_Query('showposts=5&orderby=rand'); ?>
<?php if ($rand_query->have_posts()) : while ($rand_query->have_posts()) : $rand_query->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; endif; ?>
</ul>

在这段代码中,我们首先定义了一个新的查询变量$rand_query,之后的循环语句也是对$rand_query的操作,这样就不会影响到全局变量$wp_query。

我个人比较倾向于最后这种方法,因为这段代码是完全独立的,你可以把它放在任何你需要的地方,不会对其它循环产生影响。

为了方便大家使用,我写了一个函数:

function the_rand_posts($postsNum = 10){
 $rand_query = new WP_Query("showposts=$postsNum&orderby=rand");
 if($rand_query->have_posts()){
  echo '<ul>';
  while($rand_query->have_posts()){
   $rand_query->the_post();
   echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
  }/*End while($rand_query->have_posts())*/
  echo '</ul>';
 }/*End if($rand_query->have_posts())*/
}

你只需要把这段代码复制到你正在使用的主题文件夹下的functions.php中,然后在任何你需要显示随机文章的地方加入下面这句代码即可:

<?php the_rand_posts(); ?>

这样就会显示10篇随机文章标题,如果你只想显示5篇,可以这样调用:

<?php the_rand_posts(5); ?>

好了,今天DDBug就为你介绍到这里,如果有任何疑问,可以留言。同时欢迎各方英雄来讨论相关话题。