Wordpress在首页文章显示评论的方法

In: PHP

31 Jan 2010

前一阵给TTT弄了个博客:http://ttt.jennal.cn/

TTT周五有个要求,她要博客的首页可以看到评论,不要点进去才能看到,那样太麻烦。

在网上找了很多资料,没有找到单独对这个进行介绍的。所以只好找了其他很多资料,加上不断的尝试,昨晚做到快4点,为了防止这次伟大的事件在我的记忆中被删除,还是写下来纪录一下。

要在首页显示评论,我们需要修改四个文件(可能你的文件命名会有些不同,没有关系)。
这些文件都位于wp-content/themes/我的主题目录下

index.php : 首页模板
homepage_comments.php : 评论模板
functions.php : 放回调函数,当然你也可以写在homepage_comments.php里面
comments.css : 放评论的css,当然你也可以写在homepage_comments.php里面

index.php很简单,在你要放评论的地方加上如下代码,当然要放在日志的循环里面:

1
<?php $withcomments=1; comments_template('/homepage_comments.php'); ?>

$withcomments 是一定要设置的,首页默认为0
至于comments_template这个函数,它会帮你comments先取出来,供你的模板使用。如果有看文档的话,应该知道有一个wp_list_comments函数,这个函数的参数没有接受postId,它是不做数据库查询工作的,具体它是怎么工作的,我也没有深究,只是用到它的回调功能来自定义我们的comments列表,这个在下面会提到。

下面我们来看一下homepage_comments.php怎么写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ul class="homepage_comments">
<?php 
	wp_list_comments(array(
		'walker' => null,
		'max_depth' => '',
		'style' => '',
		'callback' => 'homepage_comments',
		'end-callback' => null,
		'type' => 'all',
		'page' => '',
		'per_page' => '3',
		'avatar_size' => 32,
		'reverse_top_level' => true,
		'reverse_children' => ''));
?>
</ul>

本来以为直接在comments模板里面写结构和样式就可以了。但是发现不行,除非直接去取$wp_query->comments,但是这样不好,最好还是调用它的API,不然以后版本升级可能要出问题。
这里我把wp_list_comments的全部参数都列出来了,其实没有必要,只要设置你想要的参数就可以了。
这里要补充一下需求,我不希望把所有的评论都列出来,我只要列出最新的3条,而且要倒序,就是最新评论的在最上面。所以我把per_page设置成3,reverse_top_level设置成true。但是这样有个问题,显示的时候是显示最后一页,可能你有4条评论,那它只会显示第4条。在不改变和添加新API的情况下,我没想出解决的办法。如果在看这篇文章的你知道怎么解决,请告诉我。顺便说一下,type如果设置成别的可能会出问题。我之前就学别的模板,把它设置成comments,结果每个post的comment全变成一样了。然后设会all就好了,这个问题也不去深究,有兴趣的自己看源码/wp-includes/comment-template.php。
重点来了,重点是’callback’ => ‘homepage_comments’这个参数。顾名思义,这是设置回调函数,那homepage_comments就是函数名。为了代码的整洁和统一,我把这个函数放在functions.php里了。那在循环遍历comments的时候,就会调用这个函数。

下面来看functions.php这个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
function homepage_comments($comment, $args, $depth){
	$GLOBALS['comment'] = $comment;
	global $commentcount;
	if(!$commentcount) {
		$commentcount = 0;
	}?>
 
<li><div class="comment_header">
<?php if (function_exists('get_avatar') && get_option('show_avatars')) {
	echo sprintf('<span class="comment_avatar">%s</span>', get_avatar($comment, 20));
}
 
if (get_comment_author_url()) : ?>
<a id="commentauthor-<?php comment_ID() ?>" class="url <?php if($comment->comment_author_email == get_the_author_email()) {echo 'admin-url';} else {echo 'guest-url';} ?>" href="<?php comment_author_url() ?>" rel="external nofollow">
<?php else : ?>
<span id="commentauthor-<?php comment_ID() ?>">
<?php endif; ?>
<?php comment_author(); ?>
<?php if(get_comment_author_url()) : ?>
</a>
<?php else : ?>
</span>
<?php endif;?>
<span class='comment_date'>
<?php echo get_comment_time(__('Y-m-d', 'monochrome')); ?>
</span>
	</div>
	<div class="comment_content" id="comment-content-<?php comment_ID() ?>">
  <?php if ($comment->comment_approved == '0') : ?>
   <span class="comment-note"><?php _e('Your comment is awaiting moderation.', 'monochrome'); ?></span>
  <?php endif; ?>
  <?php comment_text(); ?>
	</div>
</li>
<?php } ?>

这个太长了,就不一一详细介绍了,重点讲一下$GLOBALS['comment'] = $comment;,这个是为下面那些API作准备的,类似comment_text()等。这个主要是结构,HTML和PHP混合在一起,所以代码比较乱。但是wp的API函数都能顾名思义出来,需要改结构的请自行调整。

最后我们看一下样式文件comments.css

1
2
3
4
5
.homepage_comment_title { padding-bottom:10px; color:#aaa; font-size:11px; }
.homepage_comments .comment_header { height:49px; }
.homepage_comments .comment_date { float:right; }
.homepage_comments .comment_content { text-align:left; }
.homepage_comments .comment_content p { border-bottom:1px solid #333; }

OK,一切搞定,如果出问题请自行解决,哈哈哈,本人概不负责。
可惜现在没有示例网站可以看,因为TTT看了首页显示出评论的页面以后说“但我现在想让它变回去”。唉。。辛苦了半天。。算了,至少提高了职业技能,哈哈哈

相关日志:

Sign up for PayPal and start accepting credit card payments instantly.

1 Response to Wordpress在首页文章显示评论的方法

Avatar

TTT

02月 1st, 2010 at 23:17

我就是那个折腾街No的TTT。就是我就是我。哈哈哈。不断激发人类的极限。。

Comment Form

关于博主

姓名:郑玏

性别:男

职业:程序员

爱好:KTV、乒乓球、台球、五子棋、围棋、编程

语言:中文、英语、闽南语

Email:

工作技能

  • 桌面语言:C、C++、C#、Java
  • Web语言:PHP、HTML/XHTML、CSS、Javascript
  • Xml相关:XML、XSLT、SCHEMA
  • 数据库相关:Mysql、MS Sql
  • 建模相关:UML
  • 擅长:正则表达式、Web相关语言、Xml相关、C、C++、C#、Mysql

 

2010-01月
« Dec   Feb »
 123
45678910
11121314151617
18192021222324
25262728293031
  • 风过浮萍: 软件真的很不错,谢谢您,我是刚刚用这个软件没多久,还不太了解,请问 [...]
  • Jennal: @vghnm 我试过了,不会崩溃的呀。。 确定用的是1.6.2版?建议把Data文件删除 [...]
  • vghnm: 搜个漫画就自动崩溃,如结界师 [...]
  • Jennal: @llyliluyao 如果是升级更新的话,一些已经被和谐的漫画是不会被删除的。。 [...]
  • llyliluyao: 动漫屋的资源列表可以删除了 [...]