wordpress 一段分页及分页导航的代码片段

因项目需求,需要给wordpress添加分页功能,虽然网上有很多分页代码以及插件,但是都跟我的代码冲突,于是我就抛弃了wordpress部分内置函数,用php原始的代码及结合wordpress的部分函数写了一个分页功能。(其实我想给wordpress添加日热门、周热门、月热门排行的功能,并将筛选出来的文章用列表页形式展现,而不是作为一个模块加入到页面中。可以选择另弄一个模板页,类似于tag.php,但是我选择直接用index.php页面来呈现,具体思路不在这多说了。)

先上php代码,以下代码添加到functions.php文件中

function most_comm_posts($days, $nums,$paged) { // $days是天数,比如周热门$days就是7; $nums 是每页显示的文章数量; $paged 是当前页
global $wpdb;

if($days==-1||$days==0){//-1是历史排行,0是默认设置,显示最新文章,不按热门排序
$allresult= $wpdb->get_results(“select * from $wpdb->posts WHERE post_status=’publish'”); //获得记录总数
}else
{
$today = date(“Y-m-d”); //获取今天日期时间
$todayarr=explode(“-“,$today);
$Day_today=mktime(0,0,0,$todayarr[1],$todayarr[2],$todayarr[0]);
$daysago = $Day_today-3600*24*$days;
$allresult= $wpdb->get_results(“select * from $wpdb->posts WHERE post_date>'”.$daysago.”‘ and post_date<='”.$today.”‘ and post_status=’publish'”);
}
$count=count($allresult); //获得记录总数
$allPage=ceil($count/$nums); //计算出总页数

$startCount=($paged-1)*$nums; //分页开始,根据此方法计算出开始的记录
if($days==-1){
$result = $wpdb->get_results(“SELECT comment_count, ID, post_title,post_content, post_date FROM $wpdb->posts WHERE post_status=’publish’ ORDER BY comment_count DESC limit $startCount,$nums”);
}elseif($days==0){
$result = $wpdb->get_results(“SELECT comment_count, ID, post_title,post_content, post_date FROM $wpdb->posts WHERE post_status=’publish’ ORDER BY post_date DESC limit $startCount,$nums”);
}else{
$result = $wpdb->get_results(“SELECT comment_count, ID, post_title,post_content, post_date FROM $wpdb->posts WHERE post_date>'”.$daysago.”‘ and post_date<='”.$today.”‘ and post_status=’publish’ ORDER BY comment_count DESC limit $startCount,$nums”);
}
//以上代码就是根据$days的值来读取数据库,分页思路就是最基本的分段读取数据库,用limit实现,这些不多说了。
if(empty($result)) {
$output = ‘<li>None data.</li>’;
} else {

foreach ($result as $topten) {//下面就是循环遍历的数据了
$postid = $topten->ID;
$title = $topten->post_title;
$content = $topten->post_content;
$postdate = $topten->post_date;
$commentcount = $topten->comment_count;
$output .= ‘<li > <div id=”content-‘.$postid.'” class=”postcontent”>
<h2><a href=”http://haha.zhaicool.net/article/’.$postid.'”>’.$title.'</a></h2>
<p>’.$content.'</p>
</div></li>’;

}
}
return $output.”[*#*]”.$allPage;//返回读取出的数据以及最大页数。便于index.php调用。
}

 

接着是index.php里的部分代码:

//$paged,从url获取的参数,即当前页。

// $resultarr[1] ,得到的结果是最大的页数。其值是 most_comm_posts 方法返回的值,然后用explode分割成数组得来的。

<?php

$thisurl=’http://’.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’];//获取当前url
$thisurlarr=explode(“page”, $thisurl);
$thisurl=trim($thisurlarr[0]);//提取“page”之前的url,这么做的目的就是以防万一url中有page参数时,再输出时,就会出现page叠加的情况。
$lastthisurl= substr($thisurl, strlen($thisurl)-1, 1);
if($lastthisurl==”/”){
$thisurl=substr($thisurl,0,strlen($thisurl)-1);
}
if($paged==””||$paged==null){
$paged=1;
}

?>
<div class=”wp-pagenavi”>
<span class=”pages”>第 <?php echo $paged;?> 页,共<?php echo $resultarr[1];?> 页</span><a class=”page larger” href=”<?php echo $thisurl;?>/page/1/”>首页</a><a class=”page larger” href=”<?php echo $thisurl;?>/page/<?php echo $resultarr[1];?>/”>末页</a>
<?php
if($resultarr[1]>11){
if($paged<=6){
$i=1;
}elseif($resultarr[1]-$paged<6){
$i=$resultarr[1]-10;
}else{
$i=$paged-5;
}
}else{
$i=1;
}
$navhtml=””;
for($k;$k<11;$k++){

if($i==$paged){
$navhtml=$navhtml.'<span class=”current”>’.$i.'</span>’;
}else{
$navhtml=$navhtml.'<a class=”page larger” href=”‘.$thisurl.’/page/’.$i.’/”>’.$i.'</a>’;
}
$i++;

}
echo $navhtml;
?>
以上php主要目的就是循环显示页码,最多显示11个页码,当前页码保持正中。大致思路就是先判断总页数为多少,如果少于6页,那么就完全列出页码,大于6页就将当前页面居中显示。比如当前页是6,那么显示出来的页码就是1,2,3,4,5,6,7,8,9,10,11;如果是8,显示出来就是3,4,5,6,7,8,9,10,11,12,13;总之就是保证当前页吗在中间,左右各五个页码。以上代码也可以封装成方法加在functions.php中,不过我懒。。。

演示效果:http://haha.zhaicool.net/

 

未经允许不得转载:前端撸码笔记 » wordpress 一段分页及分页导航的代码片段

上一篇:

下一篇: