由于本站使用了wp-t-wap插件作为用户手机访问时节省流量和适合手机浏览的界面,因此不断的优化了wp-t-wap插件的在线功能。之前《实现wordpress手机访问:基于wp-t-wap非插件》一文实现了wp-t-wap插件新增文章别名和文章形式的功能,(请在文章中下载已经优化了的非插件形式的wap.zip)今天,我们实现wp-t-wap的在线回复留言功能。
wp-t-wap具有在线管理的功能,但作为管理员,却只能对新的评论进行审核,对文章进行评论,却不能对特定的某条留言进行回复。因此,乌徒帮wordpress联盟结合wordpress本身特性,新增了wp-t-wap插件在回复留言上的功能。为了让朋友们对这一功能的深入理解,本文先将该功能实现的步骤进行阐述,然后对wp-t-wap留言回复机制的实现稍加说明。
1、新增前台可视化回复框和回复链接:
1)在index-wap2.php中的
<?php endif; ?>??
后添加以下这段代码,这样在浏览一篇文章时就有了留言功能
<?php if ('open' == $post->comment_status) : ?>
' />
???????
<?php do_action('comment_form', $post->ID); ?>
2)在comments.php中做如下修改
?<?php foreach ($comments as $comment) : ?>
之后添加上:
?<?php if($_GET['comment']&&$_GET['comment']!=$comment->comment_ID) continue; ?>
往下找,在
?<?php
??????? if ( my_get_option("wap_show_detail") != 'yes' ){
??comment_text_rss();
??????? }else{
??????????????? if ( strlen( get_comment_text() ) > 0 ) :
??????????????????????? comment_text();
??????????????? else :
??????????????????????? comment_excerpt();
??????????????? endif;
???????? }
?>
之后添加上:
?
接着往下找,在下方添加这段:
?' />
3)在wap-comments-post.php中修改如下信息:
在$comment_content= trim($_POST['comment']);后面添加一行:
$comment_parent= trim($_POST['comment_parent']);
另外,用下面的代码覆盖代替原来的代码
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content','comment_parent', 'comment_type', 'user_ID');
4)修改functins.php:在
后面添加一行:
?if ( 'unapproved'!= $comment_status) echo " | ".__('回复','wap')."";
通过上面四步,就实现了wp-t-wap插件的在线回复功能,http://www.utubon.com接下来我们来稍稍分析以下wp-t-wap回复机制。
在wp-t-wap中调用了很多wordpress系统原函数,所以很多wordpress系统本身的函数可以在wp-t-wap中使用,你可以用function_exists('function_test')来测试函数function_test()函数是否存在。而wp-t-wap回复也是调用了很多系统函数。
我们以管理员的身份在wap目录下登录,点击底部的管理评论,如果有未审核的评论,就会出现,并有功能选项“[删除 | 已审核 | 垃圾评论 ] ”,当我们做了上述4的修改后,这个选项就多了一项,变成“[删除 | 已审核 | 垃圾评论 | 回复 ] ”,多了回复功能。而且通过if ( 'unapproved'!= $comment_status)的判断后,没有通过审核的评论是不能回复的(这和wordpress的评论机制有关,没有审核的评论回复是没有评论传递的)。
完成上文1的步骤之后,即使访客也可以在文章页留言评论。但这里的评论只是为了增加访客留言的便捷性,而不是本文要解决的对评论的回复。
上文的2和3步这是本文最核心的部分,2(修改comments.php)解决了给每个留言添加“回复”选项链接,点击该链接后,会获取一个新的地址,即?p=$post_id&comment=$comment_id,程序用if($_GET['comment']&&$_GET['comment']!=$comment->comment_ID) continue;判断是否选择某一项评论单独回复,如果存在comment地址参数,就会得到一个只有该条评论和回复框的页面,而该页面中的form拥有了' />,即父评论的ID,这样,只要提交这个form就让该评论成为回复对应comment_id评论的评论了。
3(修改wap-comments-post.php)则是对提交的评论做了新的处理,原来是不处理comment_parent属性的,修改后,根据表单传递的comment_parent值修改这条评论的父评论,从而确定了该评论是回复哪条评论的评论。
为了让这些评论显得有层次感和交流性,建议再做如下修改:
在2(修改comments.php)中修改以下内容:
if ($p > 0) {
?$comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email, comment_author_url, comment_date,?comment_content,comment_parent,comment_post_ID, $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments LEFT JOIN $wpdb->posts ON comment_post_ID = ID WHERE comment_post_ID = '$p' AND $wpdb->comments.comment_approved = '1' AND $wpdb->posts.post_status = 'publish' AND post_date < '".current_time('mysql')."' ORDER BY comment_date");
和
} else {
?$comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email, comment_author_url, comment_date, comment_content,comment_parent,comment_post_ID, $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->comments.comment_approved = '1' AND post_date < '".current_time('mysql')."' ORDER BY comment_date DESC LIMIT 10");
即将两个$comments用上面的这些代码覆盖。
在<?php foreach ($comments as $comment) : ?>修改添加以下内容:
?<?php if($_GET['comment']&&$_GET['comment']!=$comment->comment_ID) continue;$comment_parent=$comment->comment_parent; ?>
?
?
# comment_ID() ?> if($comment_parent){echo "回复#";echo $comment_parent;}?> <?php _e("Author","wap") ?>: <?php comment_author_rss() ?> <?php _e("Time","wap") ?>: <?php comment_time(get_option('date_format').' ('.get_option('time_format').')'); ?>
通过上面这段代码的修改,你就可以看到在评论开头出现了“#12 回复#11”的字样,从而体现了这条评论属于一条对上面回复的评论。
好了wp-t-wap插件中实现评论在线回复的功能就讲到这里,如有不足之处,可以和frustigor交流。