WordPress 非插件日志分页效果
我在 WordPress 上坚持非插件的主导原则,常用的非插件的功能也介绍过不少,比如《WordPress 免插件实现图片相关日志》、《WordPress 非插件相关日志的两种方法》、《WordPress 非插件统计网站访问信息》等等。今天就再介绍一下 WordPress 中非插件实现的日志分页吧,这个好像已经有不少高手们都写过了,那我就当再复习一下吧,以下代码是来自于 Zeus 大哥的主题 D&Z themes,而这部分分页代码好像是提取自 pagenavi 插件的,函数部分我也就没啥修改,照搬了上来。
把以下代码复制到主题文件中的 functions.php
function pagenavi($before = '', $after = '') {
global $wpdb, $wp_query;
if (!is_single()) {
$request = $wp_query->request;
$posts_per_page = intval(get_query_var('posts_per_page'));
$paged = intval(get_query_var('paged'));
$numposts = $wp_query->found_posts;
$max_page = $wp_query->max_num_pages;
if(empty($paged) || $paged == 0){
$paged = 1;
}
$pages_to_show = intval($pagenavi_options['num_pages']);
$pages_to_show = intval(3);
$pages_to_show_minus_1 = $pages_to_show-1;
$half_page_start = floor($pages_to_show_minus_1/2);
$half_page_end = ceil($pages_to_show_minus_1/2);
$start_page = $paged - $half_page_start;
if($start_page <= 0) {
$start_page = 1;
}
$end_page = $paged + $half_page_end;
if(($end_page - $start_page) != $pages_to_show_minus_1) {
$end_page = $start_page + $pages_to_show_minus_1;
}
if($end_page > $max_page) {
$start_page = $max_page - $pages_to_show_minus_1;
$end_page = $max_page;
}
if($start_page <= 0) {
$start_page = 1;
}
if($max_page > 1 || intval($pagenavi_options['always_show']) == 1) {
$pages_text = str_replace("%CURRENT_PAGE%", number_format_i18n($paged), "页面 %CURRENT_PAGE% / %TOTAL_PAGES%");
$pages_text = str_replace("%TOTAL_PAGES%", number_format_i18n($max_page), $pages_text);
echo $before.'<div class="pagenavi">'."\n";
if(!empty($pages_text)) {
echo '<span class="pages">'.$pages_text.'</span>';
}
if ($start_page >= 2 && $pages_to_show < $max_page) {
$first_page_text = str_replace("%TOTAL_PAGES%", number_format_i18n($max_page), "« 第一页");
echo '<a href="'.clean_url(get_pagenum_link()).'" title="'.$first_page_text.'">'.$first_page_text.'</a>';
echo '<span class="extend">...</span>';
}
previous_posts_link("«");
for($i = $start_page; $i <= $end_page; $i++) {
if($i == $paged) {
$current_page_text = str_replace("%PAGE_NUMBER%", number_format_i18n($i), "%PAGE_NUMBER%");
echo '<span class="current">'.$current_page_text.'</span>';
} else {
$page_text = str_replace("%PAGE_NUMBER%", number_format_i18n($i), "%PAGE_NUMBER%");
echo '<a href="'.clean_url(get_pagenum_link($i)).'" title="'.$page_text.'">'.$page_text.'</a>';
}
}
next_posts_link("»", $max_page);
if ($end_page < $max_page) {
echo '<span class="extend">'."...".'</span>';
$last_page_text = str_replace("%TOTAL_PAGES%", number_format_i18n($max_page), "最后一页 »");
echo '<a href="'.clean_url(get_pagenum_link($max_page)).'" title="'.$last_page_text.'">最后一页 »</a>';
}
echo '</div>'.$after."\n";
}
}
}
global $wpdb, $wp_query;
if (!is_single()) {
$request = $wp_query->request;
$posts_per_page = intval(get_query_var('posts_per_page'));
$paged = intval(get_query_var('paged'));
$numposts = $wp_query->found_posts;
$max_page = $wp_query->max_num_pages;
if(empty($paged) || $paged == 0){
$paged = 1;
}
$pages_to_show = intval($pagenavi_options['num_pages']);
$pages_to_show = intval(3);
$pages_to_show_minus_1 = $pages_to_show-1;
$half_page_start = floor($pages_to_show_minus_1/2);
$half_page_end = ceil($pages_to_show_minus_1/2);
$start_page = $paged - $half_page_start;
if($start_page <= 0) {
$start_page = 1;
}
$end_page = $paged + $half_page_end;
if(($end_page - $start_page) != $pages_to_show_minus_1) {
$end_page = $start_page + $pages_to_show_minus_1;
}
if($end_page > $max_page) {
$start_page = $max_page - $pages_to_show_minus_1;
$end_page = $max_page;
}
if($start_page <= 0) {
$start_page = 1;
}
if($max_page > 1 || intval($pagenavi_options['always_show']) == 1) {
$pages_text = str_replace("%CURRENT_PAGE%", number_format_i18n($paged), "页面 %CURRENT_PAGE% / %TOTAL_PAGES%");
$pages_text = str_replace("%TOTAL_PAGES%", number_format_i18n($max_page), $pages_text);
echo $before.'<div class="pagenavi">'."\n";
if(!empty($pages_text)) {
echo '<span class="pages">'.$pages_text.'</span>';
}
if ($start_page >= 2 && $pages_to_show < $max_page) {
$first_page_text = str_replace("%TOTAL_PAGES%", number_format_i18n($max_page), "« 第一页");
echo '<a href="'.clean_url(get_pagenum_link()).'" title="'.$first_page_text.'">'.$first_page_text.'</a>';
echo '<span class="extend">...</span>';
}
previous_posts_link("«");
for($i = $start_page; $i <= $end_page; $i++) {
if($i == $paged) {
$current_page_text = str_replace("%PAGE_NUMBER%", number_format_i18n($i), "%PAGE_NUMBER%");
echo '<span class="current">'.$current_page_text.'</span>';
} else {
$page_text = str_replace("%PAGE_NUMBER%", number_format_i18n($i), "%PAGE_NUMBER%");
echo '<a href="'.clean_url(get_pagenum_link($i)).'" title="'.$page_text.'">'.$page_text.'</a>';
}
}
next_posts_link("»", $max_page);
if ($end_page < $max_page) {
echo '<span class="extend">'."...".'</span>';
$last_page_text = str_replace("%TOTAL_PAGES%", number_format_i18n($max_page), "最后一页 »");
echo '<a href="'.clean_url(get_pagenum_link($max_page)).'" title="'.$last_page_text.'">最后一页 »</a>';
}
echo '</div>'.$after."\n";
}
}
}
调用的函数也很简单:
<?php pagenavi(); ?>
把以上这句代码插入到 index.php 或者 archive.php 中需要的位置就可以了。
关于这个 CSS 样式嘛,大家可以各自发挥,以下是我现在用的带圆角的样式,可以参考下:
.pagenavi a,.pages,.extend,.current{-moz-border-radius:10px 0;-webkit-border-top-left-radius:10px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:10px;border-radius:10px 0;}
.pagenavi{float:right;font-size:12px;padding:3px 0;}
.pagenavi a{background:#EAEAEA;border:1px solid #B1BDC7;color:#333;margin:2px;padding:2px 5px 1px;}
.pagenavi a:hover{background:#342D27;border:1px solid #B1BDC7;color:#FFF;}
.pages,.extend{background:#F5F5F5;border:1px solid #B1BDC7;margin:2px;padding:2px 5px 1px;}
.current{background-color:#342d27;border:1px solid #9b999a;color:#fff;font-weight:700;margin:2px 0;padding:2px 5px 1px;}
.pagenavi{float:right;font-size:12px;padding:3px 0;}
.pagenavi a{background:#EAEAEA;border:1px solid #B1BDC7;color:#333;margin:2px;padding:2px 5px 1px;}
.pagenavi a:hover{background:#342D27;border:1px solid #B1BDC7;color:#FFF;}
.pages,.extend{background:#F5F5F5;border:1px solid #B1BDC7;margin:2px;padding:2px 5px 1px;}
.current{background-color:#342d27;border:1px solid #9b999a;color:#fff;font-weight:700;margin:2px 0;padding:2px 5px 1px;}
这个效果嘛,可以看我的首页,最好是用非 IE 核心的浏览器,因为 IE 看不到我用的圆角样式。
-
显示 Wordpress 所有分页页码2011年03月3日 -
万戈牌 Fuck IE6 非插件版2011年05月13日 -
非插件同步 WordPress 日志到嘀咕2011年03月31日 -
阻止 Wordpress 对站内文章的 pingback2011年03月28日
Pingback: 浪人 » WordPress 非插件索引页分页导航
不知道有没日志内分页的非代码实现方法,当然,最好是能同时解决网上其它内分页代码引起的重复页面问题,在你网站搜了,结果显示说“大爷,这个真的没有”
有非插件的方法,不过我是没写过,改天写个吧
等你的教程,这个在网上好像还找不到相关的介绍,有的都是page页面分页的重复标题和元说明解决办法,没有单篇文章分页造成的重复标题和元说明的解决办法
如果我想显示5页呢?
哦,不用了,解决了。改3为5即可。
我经常做这种事~~问了问题 自己解决·
感觉这个代码就是从插件上扒下来的

你整合的?
恩,是呀,不过不是我扒下来的
过几天考试完了,也弄个wp博客玩玩
原来你用的不是WP呀,快快加入WP吧
走过就留言
一般情况下 用不到这个 除非写小说
说得在理,哈哈
现在好多主题都自带分页样式了
请问IM是哪的域名啊?
是马恩岛的域名,小国家
wordpress就是强大,我准备也换上php的了。哎,没办法的事情。
最近没机会折腾,考完试再说
正需要这个,现在下决心要花时间在typecho上实现了!
typecho就靠你振兴了
优势是速度。但是代码多了,也影响呀~
其实在执行效率上几乎是一样的,因为只是把插件中的代码提取出来罢了
非插件相比插件的优势在哪里?请赐教。
便于修改,更加DIY,仅此而已
真的行吗?我怎么刚刚试了,没有效果啊?
不会吧,看看你的编码是UTF8吗
很想试试看 可就是怕改错了
先在本地备份一下嘛,一般不会出错的
貌似很多功能都可以直接从插件cp到functions.php使用,效率方面真不知道有没有提高
如果像这个pagenavi一样,直接把插件代码复制到functions.php中,这样的话应该在执行效率上是一样一样的
好久没来了,来了依旧看不懂。。。。
今天更新一篇日记文,保证你能看懂,哈哈
看的鄙人头都大了~!!!
把大看大?我的文章居然有这功效,哈哈
我用的也是免插件
在wp_pagenavi挖出来的代码
哈哈,那和我用的这个方法一样耶
万戈引领非插件流
这是逆WP而行,哈哈
用之前觉得好
用之后觉得更好!
赞一个!
过来看看 我订阅啦哈
有空去我博客看看
不更新我也来转转,不过我发现这个月快结束了,水王貌似没悬念了。
还希望万哥在博客里能多美言俩句。
呵呵,新一届的水王诞生了,你两天没有抢到沙发了吧
从google搜过来的,就拿过去用了,运行正常。得留言表示一下感谢,谢谢了,呵呵。
呵呵,不用客气啊
代码帝!
呵呵,这个我没怎么折腾,代码是主题现成的
我是emlog,跟我不搭边。
改明儿我折腾emlog去,哈哈
真的吗?什么时候,你转战emlog 啊!
现在,emlog,是群龙无首啊,就等万
嗯,目前就是为了减少插件而已
我也是,哈哈,所以就用了各种方法来非插件化
老佛爷,我来了,马上正式加入WP行列,现在缺的就是主机,想找一个赞助!域名买好了,heydou.com 哈哈
哈哈,你终于加入WP了,主机嘛我这里广告很多啊,都去问问吧,看人家肯不肯赞助
切 我是两手抓,心向PJ,身至WP
快快归降WP吧,哼哼
组织水元素淹了你
这个我也是用代码的,不过不知道来自哪里了。呵呵。
用这个方法的还挺多的
出问题了啊,后台不能登录了
解决,感谢万戈,functions.php文件要改下编码格式为utf
我就友情支持下吧 zblog用户飘过
松松啥时来搬来我们WP,帮我们一起壮大声势
很早就把pagenavi集成了,这里又看见了。
你也是爱折腾的主,相信你早就用上啦,哈哈
这个我已经用上了,好像似乎大概就是在你这里拿的。
我好像以前没有写过这个介绍啊,呵呵
我的分页也是用代码实现的。
基本都是从插件中提取出来的代码吧,呵呵
我也开始恨插件了,它整天提示我升级,郁闷死我了
哈哈,是啊,如果用代码的话,升级与否就由自己掌控了
其实和插件是一样的效果,并没有减少多少代码。不过整合进主题也许是的优势。
从效率上来说是没什么优势,其实和插件一样一样的
很多地方都有介绍过了,只是在代码上大同小异
这个跟zeus自带的是一样的吗,但是我那边最后一页按钮不能显示,是不是要达到4页以上才会显示
是的,我就是把zeus的代码给发出来了,哈哈
昨天正在看日志分页,正想说去搞一个,这里就放出代码来了呀
哈哈,那你正好可以用上啦
哇,好长的代码啊!
可以按需精简一下
我用的木木那边的代码,效果也差不多。
你这个貌似跟插件比较接近,看周末再折腾了。
恩,我看了木木的,好像比我的还简洁
我不太喜欢分页的
日志多了总要分页的嘛
哇塞,那代码这么长,看来还是用插件方便点
哈哈,这个比较适合像我这样爱折腾的人
这个完全是和pagenavi的效果一样的啊。
恩,代码就取自pagenavi插件
哈哈,我也昨天刚折腾上这个玩意,不过代码不大一样,我用的是ei2u的核心代码和木木的CSS
占个首页还算不错,慢慢看
哈哈,评论区首页啦
貌似一不留神,首页都占不到的
呵呵,真是抬举小站呀,我这里人气没有那么旺
要不是今天上推,看到你推广,即使上来逛逛,估计要排到老后面了,这东西好,拿走了,能不用插件尽量不用
呵呵,谢谢啊,常来啦,我会经常写一些技术心得的
QQ上线啊,有问题求助
正好上班呢,晚上加你QQ吧
还是没有沙发。
好久没坐过沙发啰,无料还是来晚啦
离沙发太远,明天继续!
我要黑幕沙发
哈哈,这个沙发一般是被美女内定的
我说喵怎么不理我了
已在GR中标记,备用
呵呵,早日用上了,不错的
你的日志不分页吗?很实用的说
我的文章都很短,嘻嘻!
这篇说的是首页的日志分页,不是指每篇日志的分页,呵呵
我相信这个功能是每个博客都需要的
我也是这样弄的,很方便
恩,能不用插件就不用插件嘛
你也不演示一下
就是我的首页嘛
对于长篇文章 很有作用
额,不是日志内分页啊.
你要日志内分页?也有免插件的方法
日之内分页WP已经有默认函数的~
不过好像也是隐藏的吧,需要用插件调出来
我用插件,呵呵
这个有些主题支持的。有些不支持。
技术帖
传说中的沙发?
板凳