2015-06-18
WordPress的文章页页有实现上一篇下一篇的功能函数,不过我们想在单页page.php里面实现上一页下一页的功能,previous_post_link()和next_post_link() 函数还不能完全满足我的需要,所以就自己写函数实现。
页面有分级功能,需求是按 menu order 排序的子级页面之间有上一篇、下一篇链接,如:
Themes(父级页面)
---- zBench(子级页面1)
---- zBorder(子级页面2)
---- zSofa(子级页面3)
如果当前页面是 zBorder,那么就要上一篇链接是 zBench 的,下一篇链接是 zSofa 的。
把下面函数代码放入 functions.php(注:函数随手写的,可能不够精简)
/** * get subpage previous/next page link by zwwooooo */ function subpage_nav_link($prevText='', $nextText='') { global $post; if ( !$post->post_parent ) return null; //如果不是子页面返回Null $args = array( 'sort_order' => 'ASC', 'sort_column' => 'menu_order', 'child_of' => $post->post_parent, 'post_type' => 'page' ); $pages = get_pages($args); $num = count($pages); $i = 0; $index = -1; foreach ($pages as $page) { if ($page->ID == $post->ID) { $index = $i; break; } ++$i; } if ($i == 0) { $prev = ''; $next = $pages[$index+1]; } elseif ($i == $num-1) { $prev = $pages[$index-1]; $next = ''; } else { $prev = $pages[$index-1]; $next = $pages[$index+1]; } if ($prev) { if ($prevText) { if ( substr_count($prevText, '%title') > 0 ) { $explode = explode('%title', $prevText); $prevText = $explode[0] . get_the_title($prev->ID) . $explode[1]; } } else { $prevText = get_the_title($prev->ID); } $prevlink = '<a class="previous-page-link" href="' . get_page_link($prev->ID). '">' . $prevText . '</a>'; } if ($next) { if ($nextText) { if ( substr_count($nextText, '%title') > 0 ) { $explode = explode('%title', $nextText); $nextText = $explode[0] . get_the_title($next->ID) . $explode[1]; } } else { $nextText = get_the_title($next->ID); } $nextlink = '<a class="next-page-link" href="' . get_page_link($next->ID). '">' . $nextText . '</a>'; } return array($prevlink, $nextlink); } [函数] subpage_nav_link($prevText, $nextText) [参数] $prevText: 为前一篇文章链接文字,为空时默认是页面标题 $nextText: 为下一篇文章链接文字,为空时默认是页面标题; 例如:一般的主题是在 page.php 的 loop 循环里面(不知道就在 the_content(); 下面吧)插入调用代码 <?php if ( function_exists('subpage_nav_link') ) { if ( $subpage_nav_link = subpage_nav_link() ) { echo $subpage_nav_link[0]; //上一篇(页面)链接 echo $subpage_nav_link[1]; //下一篇(页面)链接 } } ?>
注:可以用 if (!$subpage_nav_link[0]) 来判断有没有上一篇,同样 if (!$subpage_nav_link[1]) 来判断有没有下一篇。
PS: $prevText 和 $nextText 还支持字符组合,如 subpage_nav_link('oo %title xx', '') 这样的话,前一篇文章链接文章会变成“oo 页面名 xx”
另一篇实用文章:实现wordpress文章页调用同分类上/下一篇文章
wordpress提供的显示上一篇、下一篇文章的函数代码是按照发布顺序调用的,前几天做的wordpress小说模板,由于使用每个分类添加一部小说《博客吧首款wordpress小说网站主题模板wpnovel》,如果使用这样的上下篇文章调用顺序显示不合适,让文章页显示同分类下的上一篇、下一篇文章才是正道,wordpress是强大的,总能满足用户的想法,通过搜索找到了相关的函数代码。
默认直接调用的代码
<?php previous_post_link('上一篇: %link') ?>
<?php next_post_link('下一篇: %link') ?>
当文章处于首篇或末篇时,会显示空白,但可以通过增加判断还填补空白
<?php if (get_previous_post()) { previous_post_link('上一篇: %link');} else {echo "已是最后文章";} ?>
<?php if (get_next_post()) { next_post_link('下一篇: %link');} else {echo "已是最新文章";} ?>
经过测试虽然显示同分类下的文章,但首篇文章和末尾的文章会不显示对应的提示信息“已是最后文章”和“已是最后文章”。只要在get_previous_post()函数中指定一下文章所属分类ID便能使代码完全有效。
下面是完整的代码:
<?php $categories = get_the_category(); $categoryIDS = array(); foreach ($categories as $category) { array_push($categoryIDS, $category->term_id); } $categoryIDS = implode(",", $categoryIDS); ?> <?php if (get_previous_post($categoryIDS)) { previous_post_link('上一篇: %link','%title',true);} else { echo "已是最后文章";} ?> <?php if (get_next_post($categoryIDS)) { next_post_link('上一篇: %link','%title',true);} else { echo "已是最新文章";} ?>
打开主题目录下的文章页single.php,在要显示的位置添加代码,保存文件即可。
奇妙商场嘉年华最新版本(改名奇妙故事创造家)下载v9.82.63.00 安卓版
其它手游 192.9M
下载天天爱消除官方下载v2.34.0.0Build13 安卓手机版
休闲益智 341.9M
下载爱玩信阳黑七游戏下载v10.50.208 安卓最新版
其它手游 96.1M
下载掌上英雄联盟ios版下载v10.12.2 iphone版
其它手游 346M
下载咪咕快游云游戏ios版下载v10.2.59 iphone版
其它手游 397M
下载罗布乐思roblox国际服最新版ios下载v2.651.836 iphone版
其它手游 258M
下载傲世西游ios版下载v2.116 iPhone版
其它手游 282M
下载宝宝甜品店宝宝巴士免费版下载v9.82.59.01 安卓版
其它手游 140.9M
下载最强NBA官方版下载v1.51.621 安卓版
下载
蛋仔派对4399版下载v1.0.168 安卓游戏盒版
下载
跑跑卡丁车官方竞速版手游下载v1.34.2 安卓版
下载
宝宝巴士世界国际版下载v10.00.75.21 官方安卓最新版
下载
王者荣耀体验服下载v10.11.13.1 安卓2024最新版
下载
2024王者荣耀前瞻版下载v10.11.13.1 安卓版
下载
宝宝奇妙世界游戏手机版(宝宝巴士世界)下载v10.00.75.21 安卓最新版
下载
nba直播ios版下载v7.17.0 iphone版
下载