如何为你的主题添加Ajax评论功能
标签: ajax, css, 教程, 评论资源共享
今天吃完早餐,本来是要写论文的,但突然想起AJAX的评论功能,所以,就马上动手折腾起来。当然,原本以为很难的嘛,所以,已经做好准备失败的痛苦。不过,其实很简单。我们总是被"AJAX"这个名词给吓坏了,不敢去轻易尝试。如果你刚好看到这篇文章,就尝试一下吧,即使不知道它们的工作原理,不懂PHP/CSS,甚至HTML。
首先,你需要这个包:ajax-comment.zip。里面的东西你不需要懂,当然,能懂是最好不过的;-)。把它解压出来,得到两个文件夹:
/comments-ajax.php
/js/ 里面包含三个文件,分别是:ajax_comments.js effects.js.php & prototype.js.php
把这两个文件夹复制到/wp-content/themes/your_theme/目录下,接下来,调用它。很简单,在header.php中找到
<?php wp_head(); ?> ,在它上面,<title>标签内,加上如下代码:
- <br />
- <?php if (is_single() and ('open' == $post-> comment_status) or ('comment' == $post-> comment_type) ) { ?> <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/prototype.js.php"></script> <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/effects.js.php"></script> <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/ajax_comments.js"></script> <?php } ?>
接下来,就是我们要让这些JS来实现我们效果的时候了。打开 comments.php,找到<ol class="commentlist"> 把它改成:<ol class="commentlist" id="commentlist">,即是为这个<ol>添加了id="commentlist",当然,如果你的comments.php中的ol中没有定义样式,那再好不过。如果定义了相同的样式,那你不需要修改它。
找到<?php if ($comments) : ?> ,并保证它出现在 <ol class="commentlist" id="commentlist"> 下面。如果不是的,把它放在下面。这样才能使AJAX效果得以实现。大多数wordpress主题,的样式都不是我们希望的样式,或许你曾经做了这个测试,但没有成功,就是因为他们的位置问题。
UPDATE:以上这点:经测试证明,完全可以。
找到下面这段代码(当然,不必完全相似,因为不同的作者写法不同,但PHP语言应该是非差不多相同的):
- <?php else : // this is displayed if there are no comments so far ?> <?php if ('open' == $post->comment_status) : ?> <!-- If comments are open, but there are no comments. --> <?php else : // comments are closed ?> <!-- If comments are closed. --> <p class="nocomments">Comments are closed.</p> <?php endif; ?>
把它代换成下面的代码(事实上,只要找出他们的不同处,修改就可以了,有时根本不必修改!)
- <?php else : // this is displayed if there are no comments so far ?> <?php if ('open' == $post->comment_status) : ?> <!-- If comments are open, but there are no comments. --> <li id="hidelist" style="display:none"></li> </ol> <p id="nocomment">No comments yet</p> <?php else : // comments are closed ?> <!-- If comments are closed. --> <li style="display:none"></li> </ol> <p>Comments are closed.</p> <?php endif; ?>
再找到<?php if ('open' == $post->comment_status) : ?>.,在它的前面或后面加上下面这代码:
- <div id="loading" style="display: none;">Posting your comment.</div> <div id="errors"></div>
注意:你会看到我评论中在评论提交过程中显示一个进度提示条,就是定义这里的#loading的样式。关于加载图片,你可以在这里找到很多很漂亮的,而且不用自己动手做。
还有,还是在comments.php中找到:
- <form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
把它换成:
- <form id="commentform" action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" onsubmit="new Ajax.Updater({success: 'commentlist'}, '<?php bloginfo('stylesheet_directory') ?>/comments-ajax.php', {asynchronous: true, evalScripts: true, insertion: Insertion.Bottom, onComplete: function(request){complete(request)}, onFailure: function(request){failure(request)}, onLoading: function(request){loading()}, parameters: Form.serialize(this)}); return false;">
到这里,基本上已经大功能造成了。只是几步嘛。别急,最近,确保你的评论提高按钮是用#submit的ID,像这样:
- <input name="submit" type="submit" id="submit" value="Submit" />
如果不是的话,帮它加个ID吧,我们需要这个。
好了,已经没有了,是不是感觉终于熬到头了,你需要做的是保存它。然后,测试。不出问题的话,你会欣喜地发现,你已经拥有Ajax评论功能了。哈哈,是不是很简单呢?更详细的可以看《WordPress Ajax Commenting revisited》,我是从这里学习的哦。这是一个很出名的教程。感谢作者,让不懂得很多的人拥有AJAX的评论功能。