Home » WP使用, 进阶使用 » 怎样使你的主题兼容WP2.7

怎样使你的主题兼容WP2.7

wordpress升级到2.7以后,新增了一个函数,那就是wp_list_comments,这个函数使得在主题模板的评论功能上跟以前版本有了个新的亮点,那就是Thread comment,也就是嵌套评论功能,这样的功能在以前的版本要通过特定的插件来实现。我们下载到的主题有些不一定支持wp2.7,可自己有很喜欢,也很想让这个主题支持Thread comment这样的一个功能,那要如何做呢?
1.把你的主题模板的comments.php另存为legacy.comments.php,那现在你的主题就有了一个comments.php和一个legacy.comments.php文件了;
2.打开你的header.php文件,在

1
<?php wp_head(); ?>

之前加入:

1
<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>

这一步主要是添加 comment-reply JavaScript,让评论嵌套 (Thread comment) 能够正常运行;
3.打开主题里的functions.php文件,添加以下代码:

1
2
3
4
5
6
7
add_filter('comments_template', 'legacy_comments');
  function legacy_comments($file) {
  if(!function_exists('wp_list_comments')) : // WP 2.7-only check
    $file = TEMPLATEPATH . '/legacy.comments.php';
endif;
return $file;
}

这个主要是判断 Wordpress 版本,有选择性地使用 wp_list_comments 函数
4.编辑你的comments.php文件:
4.1 请找到:

1
2
3
4
5
<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == 'comment') { ?>
......//这里的内容我省略了
<?php endforeach; ?>//记住是第一个endforeach

请替换成:

1
<?php wp_list_comments('type=comment&avatar_size=48'); ?>

这里限制了wp_list_comments函数显示的内容只是评论内容,不包括pings等,还限制了头像大小为48px,这里稍后还会介绍wp_list_comments,请往下看。
然后在后面加入:

1
2
<?php previous_comments_link() ?>
<?php next_comments_link() ?>

你也可以加入这样的:

1
2
3
4
<div class="navigation">
<div class="alignleft"><?php previous_comments_link() ?></div>
<div class="alignright"><?php next_comments_link() ?></div>
</div>

然后你用css设置下风格,这一步主要是添加评论内容的分页;
4.2 如果你还能找到:

1
2
3
4
5
<?php if ($trackback == true) { ?> 
// 我这里省略了,有可能有些HTML标签不同
	<?php endforeach; ?>
	// 我这里省略了,有可能有些HTML标签不同
	<?php } ?>

请替换成:

1
2
3
4
5
6
<?php if ( !empty($comments_by_type['pings']) ) :  ?>
	<h4>Trackbacks</h4>
	<ol class="commentlist">
	<?php wp_list_comments('type=pings'); ?>
	</ol>
	<?php endif; ?>

可能上面因为每个主题模板的不同修改会有出入,这里列出Wp2.7关于评论的loop,你可以参考一下:

1
2
3
4
5
6
7
8
9
10
11
< ?php if ($comments) : ?>
< ?php comments_number(’No Comments’, ‘One Comment’, ‘% Comments’ ); ?>
< ?php wp_list_comments(); ?>
< ?php previous_comments_link() ?>
< ?php next_comments_link() ?>
< ?php else : // this is displayed if there are no comments so far ?>
< ?php if (’open’ == $post->comment_status) : ?>
< ?php else : // comments are closed ?>
Comments are closed.
< ?php endif; ?>
< ?php endif; ?>

4.3 找到:

1
<?php if ('open' == $post->comment_status) : ?>

在下面加入:

1
<div id="respond">

再 找到</form>
在后面加入:</div>
这一步是把评论框 (Comment Form) 放入一个 ID 为 respond 的 DIV 中,不能省略
4.4 找到

1
<input name="submit" type="submit" id="submit" //后面因为可能有所不同而省略 />

在下面插入:

1
<?php comment_id_fields(); ?>

4.5 找到:

1
<?php if ( get_option('comment_registration') && !$user_ID ) : ?>

上面加入:

1
< ?php cancel_comment_reply_link(); ?>

这个是取消回复功能键
4.6这一步当然是保存啦!
5.wp_list_comments简要说明:
wp_list_comments这个函数是WP2.7才新增的一个函数,函数将根据用户的设置自动对评论进行切割和分页,然后返回包含评论内容的HTML代码。
5.1 wp_comment_list()4个主要参数:
(int)avatar_size:指定评论者的头像尺寸,默认是32,单位是px;
(string)style:评论代码用哪种标签包裹,可以在ul和div中进行选择,默认是ul;
(string)callback:指定一个定义在function.php文件中的函数,wp_comment_list()将根据该函数对评论内容进行HTML编码,所以该函数通常用于指定评论内容的样式 ;
type:有comment,pings。指你调用的是评论,还是ping,默认是两者都显示;
5.2 说一下callback
由于评论都封装在了wp_comment_list()中,所以如果需要修改评论的样式就需要另外写一个函数,用于wp_comment_list()的回调,我们需要在funtion.php文件中定义该函数,然后用wp_comment_list(“callback=函数名”)的方式进行调用。
在你的主题function.php文件中中定义mytheme_comment()函数:

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
<?php
function mytheme_comment($comment, $args, $depth) {
 
   $GLOBALS['comment'] = $comment; ?>
  <li <?php comment_class(); ?> id="comment-<?php comment_ID() ?>">
	  <div id="div-comment-<?php comment_ID() ?>">
		<?php echo get_avatar( $comment, 32 ); ?>
		<?php if ($comment->comment_parent == '0') : ?>
		<p class=timestamp><a href="#comment-<?php comment_ID() ?>">
		  <?php comment_date('Y年n月j日') ?><br>
		  <span class=time>
		  <?php comment_time('H:i a') ?>
		  </span></a></p>
		<?php endif; ?>
		<cite>
		<?php comment_author_link() ?>
		<?php edit_comment_link('(EDIT)'); ?>
		</cite>
		<?php comment_text() ?>
		<?php if ($comment->comment_approved == '0') : ?>
		<p class="moderation"> 感谢你的回复! <br/>
		  你的评论将经过一段时间的审核后显示在这里, 请稍等片刻. </p>
		<?php endif; ?>
		<div class="reply">
			<?php comment_reply_link(array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
		</div>
		<div class=hr></div>
	  </div>
<?php
        }
?>

然后wp_comment_list()函数的用法:

1
<?php wp_list_comments('callback=mytheme_comment'); ?>

Leave a comment