Web技术 Wordpress相关

WordPress私密留言评论

料神Sam发布于 2016-11-23阅读 22278 次评论 18

WordPress 私密留言评论-料网 - 外贸老鸟之路

需求分析

有些人留言时希望内容只对留言的人可见,类似私信。

实现方式

WordPress 评论后会保留评论者的 cookies,根据这个 cookie 来判断哪些评论是自己发出的,自己可以看到自己的发表的私密评论。站长可以看到所有的评论。如果浏览器 cookies 被清空,你会看不到你自己的私密评论(此私密信息会连你也不认识:) )。

功能代码

源码来自大发博客,利用钩子和过滤器,利用了 wp_commentmeta 这个表可以存储自定义字段的特性。

函数说明

update_comment_meta():  updates the value of an existing comment meta key for the specified comment.

代码逻辑

利用 add_action 触发。只要发表评论,就触发判断,是否为私密评论。如果是私密评论,则加上自定义的 commentmeta: _private。在读取私密评论时,如果评论存在 _private 的自定义属性标记,则不显示具体评论内容。

在大发代码基础上,做了一些样式上的修改:

function liao_private_message_hook( $comment_content , $comment){
    $comment_ID = $comment->comment_ID;
    $parent_ID = $comment->comment_parent;
    $parent_email = get_comment_author_email($parent_ID);
    $is_private = get_comment_meta($comment_ID,'_private',true);
    $email = $comment->comment_author_email;
    $current_commenter = wp_get_current_commenter();
    if ( $is_private ) $comment_content = '#私密# ' . $comment_content;
    if ( $current_commenter['comment_author_email'] == $email || $parent_email == $current_commenter['comment_author_email'] || current_user_can('delete_user') ) return $comment_content;
    if ( $is_private ) return '<span style="color:#A6A6A6"><i class="fa fa-lock fa-fw"></i>该评论为私密评论</span>';
    return $comment_content;
}
add_filter('get_comment_text','liao_private_message_hook',10,2);

function liao_mark_private_message( $comment_id ){
    if ( $_POST['is-private'] ) {
        update_comment_meta($comment_id,'_private','true');
    }
}
add_action('comment_post', 'liao_mark_private_message');

我们需要加一个是否设为私密评论的选项。如果你的评论框是 HTML 表单,那么就加个单选框吧。

<input type="checkbox" name="is-private">

效果如下:

WordPress 私密留言评论-料网 - 外贸老鸟之路

勾选“设为私密评论”并发表评论之后,在前台其他人看到该消息都显示为:“该评论为私密评论”。效果如下图:

WordPress 私密留言评论-料网 - 外贸老鸟之路

至于样式,自由发挥。

如果你已按照本教程的方法顺利实现了私密留言评论的功能。如果需要把现有的某个正常留言在前台页面设为私密,你可以继续阅读这篇文章:

就这样~

本站所有文章除注明“转载”的文章之外,均为原创。未经本站允许,请勿随意转载或用作任何商业用途,否则依法追究侵权者法律责任的权利。

分享到: 微信 新浪微博 QQ Qzone
料神Sam
识不足则多虑,威不足则多怒,信不足则多言。
SiteGround外贸建站主机优惠券

18条评论

发表我的评论

取消评论

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

我不是机器人
设为私密评论
添加表情

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

您的邮箱地址不会公开,仅仅用于收取回复。建议填写QQ邮箱,不宜填写工作邮箱。
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (没有就留空)
  • 问题验证:今年年份是?
呃,评论有点多哦.. 请稍等
  1. 迪亚莫Chrome · Windows 10

    Hi Sam, 用钩子插入私密勾选框会好些,用下面钩子测试可行。
    //插入私密评论勾选框
    add_action( ‘comment_form_before_fields’, ‘liao_private_comment’);
    function liao_private_comment() {
    echo ‘ 设为私密评论’;
    }

    能否添加一个功能:管理员回复也可以设为私密,仅私密评论者可见。 :mrgreen:

    2年前 (2022-09-08)
    广东
    回复
  2. 明月秋枫Chrome · Windows 7

    该评论为私密评论

    4年前 (2020-11-20)
    广东
    回复
  3. 春杰Chrome · Windows 10

    这是我的测试链接。
    https://www.machunjie.com/publish/648.html

    4年前 (2020-03-08)
    北京
    回复
  4. 春杰Chrome · Windows 10

    该评论为私密评论

    4年前 (2020-03-08)
    北京
    回复
  5. wuzuoweiFirefox · Mac OS X

    该评论为私密评论

    5年前 (2019-10-25)
    四川
    回复
    • Liaosam 外贸综合症患者.搜狗浏览器 · Windows 7
      @wuzuowei 首页侧边栏如果是 widget 调用评论,那么这部分要另写代码,做个判断。$is_private = get_comment_meta($comment->comment_ID,’_private’,true); 如果成立,只显示提示文字,此评论为私密评论。如果不成立,显示评论的内容。
      5年前 (2019-10-26)
      安徽
      回复
  6. 缙哥哥Chrome · Windows 10

    啊哈哈哈哈,大神牛逼。这是我一直想要的功能,终于找到了!先学习收藏,有空操作!

    5年前 (2019-09-22)
    浙江
    回复
  7. tmtFirefox · Windows 10

    该评论为私密评论

    7年前 (2017-11-02)
    山东
    回复
  8. lunaFirefox · Windows 10

    在原版的 wordpress 要放到哪里?

    7年前 (2017-08-03)
    山东
    回复
    • Liaosam 外贸综合症患者.搜狗浏览器 · Windows 7
      @luna PHP 的代码加到主题根目录下的 fuctions.php 文件中。
      HTML 的单选框代码加到留言表单的 html 代码中(具体在哪每个主题情况不一样,可以用文本编辑器搜索一下看看在哪个文件)
      7年前 (2017-08-03)
      江苏
      回复
      • lunaFirefox · Windows 10

        @Liaosam 刚才回复的时候复制了一段代码,评论完了就不见了。。。。我就是问最后那个私密留言那个 checkbox,,,因为网站调用的是默认的评论,然后那个东西找不着地方加,,就算加上那个了,评论之后也不是私密的,估计没响应那个 function,

        7年前 (2017-08-03)
        山东
        回复
        • Liaosam 外贸综合症患者.搜狗浏览器 · Windows 7
          @luna 找个懂 wordpress 的,发给他这篇文章,让他帮你按照这个来修改一下就行了。即使是默认的评论,也是可以在主题下的 comments.php 文件里定义的。
          7年前 (2017-08-03)
          江苏
          回复
          • lunaFirefox · Windows 10

            @Liaosam comments.php 我看过了,并且我自定义了一个 short-comments.php

            <?php
            printf( _nx( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'comments title', 'sydney' ),
            number_format_i18n( get_comments_number() ), '’ . get_the_title() . ” );
            ?>

            1 && get_option( ‘page_comments’ ) ) : // are there comments to navigate through ?>

            ‘ol’,
            ‘short_ping’ => true,
            ‘avatar_size’=> 60,
            ) );
            ?>

            1 && get_option( ‘page_comments’ ) ) : // are there comments to navigate through ?>

            ” . ” . __( ‘Name’ ) . ‘ ‘ . ( $req ? ‘*’ : ” ) .

            ”,

            ’email’ => ” . __( ‘Email’ ) . ‘ ‘ . ( $req ? ‘*’ : ” ) .

            ”,

            );

            $comments_args = array(

            ‘fields’ => $fields,

            ‘title_reply’=>’留言’,

            ‘comment_field’ => ” . _x( ‘留言’, ‘noun’ ) .

            ” .

            ”,

            ‘label_submit’ => ‘发表留言’

            );

            comment_form($comments_args);

            ?>

            麻烦您看一下

            7年前 (2017-08-03)
            山东
            回复
            • Liaosam 外贸综合症患者.搜狗浏览器 · Windows 7
              @luna 这些自定义里的参数能提交并成功保存到数据库里吗?没这样去弄过,爱莫能助。
              我的主题是直接在 comments.php 里写的评论的表单,没有去调用系统函数 comment_form();
              7年前 (2017-08-03)
              江苏
              回复
              • lunaChrome · Android

                @Liaosam 😂😂😂那没办法了吗,不能调用系统的评论了?

                7年前 (2017-08-03)
                山东
                回复
  9. 牧羊人Chrome · Windows 10

    有点儿意思,回头试试!

    7年前 (2017-04-22)
    重庆
    回复
  10. 企业管理培训Firefox · Windows 7

    好多都没有看到私密评论,PO 主还是挺用心的

    8年前 (2016-11-24)
    湖南
    回复
    • Liaosam 外贸综合症患者.搜狗浏览器 · Windows 7
      @企业管理培训 谢谢热心评论!
      7年前 (2017-04-11)
      江苏
      回复