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,在要显示的位置添加代码,保存文件即可。
迷你单机沙盒手机版下载v1.24 安卓版
其它手游 109.7M
下载生存闯关测试服下载v1.11.94 安卓版
其它手游 212.1M
下载三体乱纪元大冒险手游下载v1.0 安卓版
其它手游 13.8M
下载缩放大师官方版下载v1.2.0 安卓版
其它手游 131.1M
下载火柴人联盟释放双手游戏下载v1.17.1 安卓最新版
其它手游 84.9M
下载木乃伊法老王归来手机版下载v1.6 安卓版
其它手游 108.6M
下载少年侠客完整版下载v3.5.9 最新安卓版
其它手游 126.5M
下载魔女之恋内衣版下载v3.6 安卓版
其它手游 489.0M
下载我的安吉拉4399版本下载v5.3.0.270 安卓最新版
下载
三国伏魔录单机版下载v4.9.0 安卓版
下载
求仙斗破仙帝官方版下载v1.21.39 安卓最新版
下载
王者史诗手机游戏下载v1.0.0 安卓最新版
下载
上古神诀手游下载v2.2.0 安卓版
下载
乱时空手游下载v1.0.1 安卓版
下载
放置奇兵乐游客户端下载v1.11.0 安卓版
下载
妖怪哪里跑内购破解版下载v1.5.0 安卓版
下载