跳至正文

WordPress无插件随机文章的五个方法

在博客的文章页面或是侧边栏,添加上随机文章,不仅仅可以增强用户的粘性,因为是全站随机调取的,故而可以把一些早期发布的文章时不时的拉出来溜达一下,增加展示机会。此外还有一个更重要的作用,那就是当搜索引擎来爬你的文章的时候,每次都会有变化,同时还能增加文章的内链。

那么要如何实现呢?其实办法无非两种,要么通过插件来实现,要么通过添加代码来解决。使用插件的话也是有很多选择,比如AJAX Random Posts、中文工具箱、Random Pages Widget等等,对不想折腾代码的同学来说不失为不错的方法,简单省事,操作方便,最大的问题就是插件多了会影响网站的运行速度。我个人比较喜欢用代码来实现,下面就分享一下五种代码方法。

首先我们先来了解下WordPress随机文章的获取原理
WordPress 的文章查询函数 get_posts() 有个参数 orderby 指明了获取文章时的排序方式。通常我们是按照文章发布日期排序,比如 WordPress 站点首页、分类页和标签页中的文章列表。orderby 还可以是 rand,它使用 MySQL 的 RAND() 函数来确定排序参数,也就是随机排序。

使用方法如下:

$args = array( 'numberposts' => 5, 'orderby' => 'rand', 'post_status' => 'publish' );
$rand_posts = get_posts( $args );

这样就能得到随机排序(第 2 个参数)的已发布(第 3 个参数)文章中的 5 篇(第 1 个参数)。

需要特别注意的是,如果没有第 3 个参数,它可能会将草稿之类的文章也显示出来。

方法一:向主题模板中添加(建议使用子主题,以免每次主题升级都要修改
最直接的用法就是修改子主题模板,在需要的位置放入下面的代码。

<ul>
<?php
$args = array( 'numberposts' => 5, 'orderby' => 'rand', 'post_status' => 'publish' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>

这样就能以列表的形式展示 5 篇带链接的随机文章。这个方法虽然简单,但用到了get_posts,如果将代码放在子页模板里,在它之后的代码,比如如果在后面同时调用了当前文章的评论,那评论内容很可能出现的是最后一个随机到的文章的评论,而非当前文章的评论。

方法二:修改主题 functions.php 文件
在function.php中加入如下方法

/**
 * 随机文章
 */
function random_posts($posts_num=5,$before='<li>',$after='</li>'){
	global $wpdb;
	$sql = "SELECT ID, post_title,guid
			FROM $wpdb->posts
			WHERE post_status = 'publish' ";
	$sql .= "AND post_title != '' ";
	$sql .= "AND post_password ='' ";
	$sql .= "AND post_type = 'post' ";
	$sql .= "ORDER BY RAND() LIMIT 0 , $posts_num ";
	$randposts = $wpdb->get_results($sql);
	$output = '';
	foreach ($randposts as $randpost) {
		$post_title = stripslashes($randpost->post_title);
		$permalink = get_permalink($randpost->ID);
		$output .= $before.'<a href="'
			. $permalink . '"  rel="bookmark" title="';
		$output .= $post_title . '">' . $post_title . '</a>';
		$output .= $after;
	}
	echo $output;
}

在需要显示的地方调用如下代码

<div class="right">
	<h3>随便看看</h3>
	<ul>
		<?php random_posts(); ?>
	</ul>	
</div><!-- 随机文章 -->

不复杂吧,以上代码不依赖也不影响其他代码。

方法三:用query_posts生成随机文章列表
在需要显示的地方直接调用如下代码

<?php
query_posts(array(‘orderby’ => ‘rand’, ‘showposts’ => 2));
if (have_posts()) :
while (have_posts()) : the_post();?>
<a href=”<?php the_permalink() ?>”
	rel=”bookmark”
	title=<?php the_title(); ?>”><?php the_title(); ?></a> 
	<?php comments_number(”, ‘(1)’, ‘(%)’); ?>
<?php endwhile;endif; ?>

方法四:在随机文章中显示标题和文章摘要
在需要显示的地方直接调用如下代码

<?php
query_posts(array(‘orderby’ => ‘rand’, ‘showposts’ => 1));
if (have_posts()) :
while (have_posts()) : the_post();
the_title(); //显示标题
the_excerpt(); //显示摘要
endwhile;
endif; ?>

方法五:调用同分类随机文章
上面介绍的代码都是基于全站文章,这里再补充一个调用同分类随机文章的代码,将下面代码放到主题文章页面single模板或者边栏sidebar模板适当位置即可:

<ul> 
<?php 
$cat = get_the_category(); 
foreach($cat as $key=>$category){ 
$catid = $category->term_id; 
} 
$args = array('orderby' => 'rand','showposts' => 8,'cat' => $catid ); 
$query_posts = new WP_Query(); 
$query_posts->query($args); 
while ($query_posts->have_posts()) : $query_posts->the_post(); 
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
<?php wp_reset_query(); ?> 
</ul>

发表回复

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