WordPress AJAX 实现设置留言评论为私密

2017-06-12发布在 Wordpress1105 次访问

本文纯属个人兴趣爱好,如果你没有折腾 WordPress 的爱好,请忽略此文。

基于一些访客希望在料网上发表私密的留言评论,于是给料网添加了发表私密留言评论的功能,并分享了如何实现的 WordPress 的教程:

WordPress私密留言评论

需求分析:有些人留言时希望内容只对留言的人可见,类似私信。实现方式:WordPress 评论后会保留评论者的cookies,根据这个cookie 来判断哪些 ..

不过,上面那篇文章的需求出发点是从留言者的角度出发的,希望发布的留言内容只有网站管理员和自己可见。

还有些时候,网站的管理员发现有某条评论信息很敏感,或者很隐私的信息不太适宜让其他访客看到,那么就需要把某条已经发布的评论不对外显示。当然,这个问题可能不是个问题,网站管理员可以在后台把该评论设为待审核,或者直接删除进回收站。另外,通过 WP 的设置也很好解决,你可以开启 “ 评论通过审核才能发布” ,不过这样的话所有的评论都需要审核,有点麻烦,而且对评论发布者不太友好。

如果你像我一样博客上评论比较多,并没有设置评论必须审核才能显示,也不想把别人发表的评论移到垃圾站内,那么对于一些不想给其他人看的评论,你可以直接通过网站前台页面直接将此评论设为私密评论。

因此,这篇教程可以说是基于之前那篇教程:WordPress私密留言评论 来继续开发的。如果你希望你的网站上也能实现私密评论的完整功能,那么这两篇文章需要一起结合起来参考。

下面说说怎么实现:

在你 WP 主题根目录下的 functions.php 中加入如下代码

//将某条评论设为私密评论
 add_action('wp_ajax_nopriv_liao_private', 'liao_private');
 add_action('wp_ajax_liao_private', 'liao_private');
 function liao_private(){
 $comment_id = $_POST["p_id"];
 $action = $_POST["p_action"];
 if ( $action == 'set_private'){
 update_comment_meta($comment_id, '_private', 'true');
 $i_private = get_comment_meta($comment_ID,'_private',true);
 if( !empty($i_private)) {echo '否';
 }
 else {echo '是';
 }
 }
 die;
 }

找到输出评论列表的回调函数或模块

先找到你的 WP主题的循环输出评论列表的 wp_list_comments 函数。由于 WordPress 原生的输出评论函数 wp_list_comments() 输出的评论列表的样式非常烂,所以很多主题都会对评论列表重新修改,自定义一下评论列表。类似于: wp_list_comments(‘type=comment&callback=liao_comment_list’);

其中,callback 是定义回调函数,类似于 ‘callback’ => ‘liao_comment_list’ 的作用,liao_comment_list 就是回调部分。找到你的主题定义评论列表的这部分代码,在 Reply 和 Edit (如果有编辑评论功能)链接下添加以下代码:

if ( current_user_can( 'manage_options' ) ) {
 $comment_ID = $comment->comment_ID;
 $i_private = get_comment_meta($comment_ID,'_private',true);
 $flag .= ' - <a href="javascript:;" data-actionp="set_private" data-idp="' . get_comment_id() . '" id="sp" class="sm">私密(<span class="has_set_private">';
 if( !empty($i_private)){
 $flag .= '是';
 }
 else {
 $flag .= '否';
 }
 $flag .='</span>)</a>';
 echo $flag;
 }

保存文件,上传覆盖。如果一切顺利,网站管理员可以看到的评论列表的形式:

网站管理员登录状态下可以看到,在前台页面评论下方的回复和编辑的评论管理链接的右边,多了一条:私密状态的判断显示。

我们可以在这个私密状态上添加一个按钮,通过点击它实现 AJAX 提交并更改它的状态,比如上面评论截图中的非私密评论,我们希望点击以后不需要页面跳转或刷新就能在数据库中更新创建此评论的 commentmeta 中的记录。

在主题 JS 文件中添加代码

// 设为私密留言!
 $(document).on("click", ".sm",
 function() {
 $(this).commentPrivate();
 });
 $.fn.commentPrivate = function() {
 if ($(this).hasClass('private_now')) {
 alert('您之前已设过私密评论');
 return false;
 } else {
 $(this).addClass('private_now');
 var idp = $(this).data('idp'),
 actionp = $(this).data('actionp'),
 rateHolderp = $(this).children('.has_set_private');
 var ajax_data = {
 action: "liao_private",
 p_id: idp,
 p_action: actionp
 };
 $.post("/wp-admin/admin-ajax.php", ajax_data,
 function(data) {
 $(rateHolderp).html(data);
 });
 return false;
 }
 };

重新刷新页面,任选一条非私密的链接,点击 私密(否),将会无页面刷新和跳转,直接状态改成私密状态:私密(是)。

下次网站管理员再访问该文章或页面(或者刷新该页面),该评论的前面已自动添加了 #私密# 的信息头。

为防止重复 Ajax 提交数据,当再次点击 私密(是) 时,会弹出窗口提示:您之前已经设过私密评论!

而对网站的访客显示为:

以上,基本就实现了私密评论的前台管理。结合前面一篇发布私密评论的文章,评论体系中的私密评论就建立起来了。


这篇文章没有太考虑样式。你也可以修改代码,把 私密(是) / 私密(否) 换成 icon,比如用 Font Awesome 的 lock 和 unlock 图标,将会更加 nice,界面会简洁很多,更利于网站管理员管理评论状态。

说明:本文中部分代码受到大发的 postlike Ajax 点赞插件的启发。感谢大发!

本文 Over!

分享到微信朋友圈

LiaoSam
LiaoSam
外贸综合症患者

相关文章

    暂无

6条评论

发表我的评论

取消评论

邮箱白名单说明:最近料网自动提醒邮件经常会被一些邮件服务商拦截。为了您顺利并及时地收取留言被回复的提醒邮件,请在您邮箱中把料网 liaosam.com 加入白名单域名。

已读说明
设为私密评论
添加表情

Hi,您需要填写昵称和邮箱!

您的邮箱地址不会公开,仅仅用于收取回复。建议填写QQ邮箱,不宜填写工作邮箱。
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (没有就留空)
呃,评论有点多呢... 料网小秘书为您玩命加载中...
  1. #4

    该评论为私密评论

    3周前 (09-02)回复
  2. #3
    asdf

    撒打发斯蒂芬asdf

    2个月前 (08-04)回复
  3. #2
    Snakeater

    很有用,感谢料大。

    3个月前 (06-26)回复
    • LiaoSam
      Liaosam,外贸综合症患者。
      @Snakeater 不客气,你的头像很酷。
      2个月前 (08-02)回复
  4. #1
    辰埃文

    料大, 以后抽空分享下如何制作料网的呀, 这么高端大气又奢华美丽的网站看着就眼馋 :?: , 好想也动手做做啊, 哈哈哈

    3个月前 (06-13)回复
    • LiaoSam
      Liaosam,外贸综合症患者。
      @辰埃文 那估计能写成一篇长篇连载。。
      3个月前 (06-13)回复