填写您的邮件地址,订阅我们的精彩内容:

为wp-t-wap插件新增在线回复功能

749

由于本站使用了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 if( my_get_option(“wap_show_related_posts”) == ‘yes’ and function_exists(‘wp23_related_posts’)): ?>
<!– Related Posts –>
<?php _wp23_related_posts(); ?>
<?php endif; ?>??

后添加以下这段代码,这样在浏览一篇文章时就有了留言功能

<?php $req = get_option(‘require_name_email’); ?>
<?php if (‘open’ == $post->comment_status) : ?>
<div id=”infoblock”><h2><?php _e(‘Post Comment’,’wap’) ?></h2></div>
<div>
<form action=”wap-comments-post.php” method=”post” id=”commentform”>
<?php if ( ! is_user_logged_in() ):?>
<p><label for=”author”><?php _e(‘Author’,’wap’) ?><?php if ($req) _e(‘(required)’,’wap’); ?></label><br/>
<input type=”text” name=”author” id=”author” value=”<?php echo $comment_author; ?>” size=”22″ tabindex=”1″ /></p>
<p><label for=”email”><?php _e(‘Mail (will not be published)’,’wap’) ?><?php if ($req) _e(‘(required)’,’wap’); ?></label><br/>
<input type=”text” name=”email” id=”email” value=”<?php echo $comment_author_email; ?>” tabindex=”2″ size=”22″ /></p>??
<p><label for=”url”><?php _e(‘Website’,’wap’) ?></label><br/>
<input type=”text” name=”url” id=”url” value=”<?php echo $comment_author_url; ?>” size=”22″ tabindex=”3″ /></p>
<?php endif;?>
<p><label for=”url”><?php _e(‘Comment’,’wap’) ?></label><br/>
<textarea name=”comment” id=”comment” cols=”20″ rows=”3″ tabindex=”4″ size=”22″></textarea>
</p>
<p><input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”<?php _e(‘Post Comment’,’wap’) ?>” />
<input type=”hidden” name=”comment_post_ID” value=”<?php echo $id; ?>” />
<input type=’hidden’ name=’comment_parent’ id=’comment_parent’ value='<?php if(isset($_GET[‘comment’]))echo $_GET[‘comment’];else echo 0; ?>’ />
<input type=”hidden” name=”redirect_to” value=”<?php echo ‘comments.php?p=’ . $id; ?>” />???????
</p>
<?php do_action(‘comment_form’, $post->ID); ?>
</form>
</div>
<?php endif; ?>

具体的细节将在实施步骤之后详解。http://www.utubon.com

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;
???????? }
?>

之后添加上:

?<p><a href=”comments.php?p=<?php printf($p); ?>&comment=<? comment_ID(); ?>”>回复</a></p>

接着往下找,在<input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”<?php _e(‘Post Comment’,’wap’) ?>” />下方添加这段:

?<input type=’hidden’ name=’comment_parent’ id=’comment_parent’ value='<?php if(isset($_GET[‘comment’]))echo $_GET[‘comment’];else echo 0; ?>’ />

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:在

?echo ” | <a href=”” . wp_nonce_url(“comment.php?action=deletecomment&amp;dt=spam&amp;p=” . $comment->comment_post_ID . “&amp;c=” . $comment->comment_ID, ‘delete-comment_’ . $comment->comment_ID) . “” onclick=”return deleteSomething( ‘comment-as-spam’, $comment->comment_ID, ‘” . js_escape(sprintf(__(“You are about to mark as spam this comment by ‘%s’.n’Cancel’ to stop, ‘OK’ to mark as spam.”), $comment->comment_author)). “‘, theCommentList );”>” . __(‘Spam’,’wap’) . “</a> “;

后面添加一行:

?if ( ‘unapproved’!= $comment_status) echo ” | <a href=’comments.php?p=”.$comment->comment_post_ID.”&amp;comment=”.$comment->comment_ID.”‘>”.__(‘回复’,’wap’).”</a>”;

通过上面四步,就实现了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拥有了<input type=’hidden’ name=’comment_parent’ id=’comment_parent’ value='<?php if(isset($_GET[‘comment’]))echo $_GET[‘comment’];else echo 0; ?>’ />,即父评论的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; ?>
?<div>
<a name=”comment-<?php comment_ID() ?>” ></a>
?<p>#<? comment_ID() ?> <? if($comment_parent){echo “回复#”;echo $comment_parent;}?> <?php _e(“Author”,”wap”) ?>: <a href=”<?php comment_author_url() ?>”><?php comment_author_rss() ?></a> <?php _e(“Time”,”wap”) ?>: <?php comment_time(get_option(‘date_format’).’ (‘.get_option(‘time_format’).’)’); ?></p>

通过上面这段代码的修改,你就可以看到在评论开头出现了“#12 回复#11”的字样,从而体现了这条评论属于一条对上面回复的评论。

好了wp-t-wap插件中实现评论在线回复的功能就讲到这里,如有不足之处,可以和frustigor交流。<完>

下面我简单说几句