今天碰到一个很诡异的问题,就是本站的留言板不显示最新的评论了,我自己也发了几条评论发现总条数是增加了,后台也能查到,但前台就是不显示新的。

因为留言板的页面用的是“GuestBook and wall(留言本+读者墙) ”页面,是loper主题自带的一个页面,然后我把这个模板换成Links and wall(友情链接+读者墙) 页面,发现没有问题,能够显示最新的评论,那么肯定是页面的代码有问题了。然后我就对比了两个页面的代码:

<div class="clear"></div>	
<?php comments_template( '/guestcomments.php', true ); ?>
<div class="clear"></div>	
<?php comments_template( '', true ); ?>

显然,留言本调用了guestcomments.php这个文件,那问题肯定出在这个文件上了,这个文件比较大,我就摘重要的几段分析一下:

<!-- 嵌套评论 -->
<?php if ( function_exists('wp_list_comments') ) : ?>
	<div class="commentshow">
		<ol class="commentlist">
			<?php wp_list_comments('reverse_top_level=1&type=comment&callback=lopercomment&max_depth=10000&per_page=10'); ?>
		</ol>

	<nav class="commentnav">
		<?php paginate_comments_links('prev_text=上一页&next_text=下一页');?>
	</nav>
	</div>
<?php else : ?>
<?php endif; ?>

很惊奇的发现原来调用了wp_list_comments这个方法把评论条数限制为10条了per_page=10,而且还加了翻页的功能,可是我的留言板评论只显示了10条,但没有出现翻页器。估计是paginate_comments_links这个方法出现什么问题了,好吧,我把主题目录找遍了也没发现这个方法,然后网上一搜,kao,原来是wp自带的,路径是:wp-includes\link-template.php:

function paginate_comments_links($args = array()) {
	global $wp_rewrite;
	if ( !is_singular() || !get_option('page_comments') )
		return;

调试了一下发现果然是这个if语句跳出了,而且是get_option('page_comments')这个条件,是说我页面什么评论功能没开启吗?我去后台--设置--评论,看了下,发现居然有评论翻页的设置项,然后果断勾上。刷新一下,页面正常了,能够显示翻页器了。

 

总结一下这个问题其实是loper的bug,作者在留言板模板默认写成了翻页的模式,就是控制了评论数每页显示10条,但没考虑到wp本身的设置项,就导致了翻页器不显示。

 

老规矩,找不到合适的配图,就上福利:

Loper主题的评论翻页问题