WordPress 第一层评论只允许博主发表

LMS
6.4K+ 27

博客从废话开始。

WordPress 的评论结合页面可以用来做许多东西,以前在某博客看到用评论制作了个给人随意贴图的页面,后来在 ZWW 大大那看到用评论作为一个专门吐槽的页面,其他还有什么好创意我就想不出来了,不过时刻不忘给人带来惊奇的网友肯定还会有更多的折腾等在后面的。

其实当时发现煎蛋博客用评论来做贴图页面的时候我就想到了用它来做个发微博吐槽的功能(严重马后炮啊),可是当时有两点技术我搞不定:

  1. 不知道如何获取单独页面上的评论,将内容在博客的任意地方(公告显示的位置)显示出来
  2. 让这个页面只有博主自己能发布,而别人发布不了——不是简单的将评论框隐藏

因为我没有 PHP 基础,许多东西靠猜,最近才学会去 WordPress 官方看函数的使用,所以当时想想就放弃了。知道去官方看函数使用也是在研究 wordpress首页文章下显示评论内容 代码时受到的启发,看文章发表日期,那时候才 2012 年 11 月,通过那篇文章的研究,我上面列出来的第一个问题终于得到解决,不过第二个问题仍然不懂。后来 zww 分享了他的方法,也只是对我第一个问题的阐述,关键的问题:博主可以发评论其他人只能回复的问题依然没有解决。

今天闲逛,在【牧风】的博客上逛了一圈再跑到了【所谓刚子】那,发现他也来了个吐槽的页面,不过用的 typecho ,功能还是【牧风】帮他实现的,我当时那个激动,立马杀了个回马枪,在牧风博客上留了言,没一会的功夫,居然收到了回复。

我这里要着重强调一句:【牧风】真的是个好同志!如果可以征服棒子国隔壁的那个小丑国家,我一定把小丑国家那个独裁者的老婆赐给他!我心里真是这么想的。

废话结束,下面是[牧风]教的修改方法,原文在这里:http://mufeng.me/youku.html/comment-page-1#comment-8286

修改的时候进 willinkan 的 comments-ajax.php 文件,做如下修改:

$user = wp_get_current_user();
if ( $user->ID ) { // 登录用户
        if ( empty( $user->display_name ) )
                $user->display_name=$user->user_login;
        $comment_author       = $wpdb->escape($user->display_name);
        $comment_author_email = $wpdb->escape($user->user_email);
        $comment_author_url   = $wpdb->escape($user->user_url);
        if ( current_user_can('unfiltered_html') ) {
                if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) {
                        kses_remove_filters();
                        kses_init_filters();
                }
        }
} else { // 访问博客
        if ( get_option('comment_registration') || 'private' == $status ) err(__('抱歉,你必须登录后才能发表评论'));
 
        // 需要修改处 561 为页面的id
        if( $_POST["comment_post_ID"] == 561 && $_POST["comment_parent"]==0 ) err(__('本文只能作者发布主评论!'));
}

以上代码稍微对比一下你就知道在哪里修改了,没错,就是添加了倒数第二、第三两行,关键是那个吐槽页面的 ID 要修改一下。如果你没用 willinkan 的 ajax 评论,那得到根目录的 wp-comments-post.php 里去修改,样子长的都差不多,对比一下就 OK 了。

THE END

评论 27

  1. 大佬,我想知道在typecho应该咋实现呢 :eek: 哈哈

  2. bug
    🏅

    这种修改游客是可以阻止主评论,但是注册会员还是可以发表主评论

    1. 你不说还真没注意到,因为很少考虑博客注册的问题,这个代码只是判断登陆和非登陆用户,按上面的改确实是登陆用户就能发主评论,如果要限制只能管理员可以发,还得在}else{前面添加代码。

      1. 那具体放什么代码呢,我小白,希望指点一二,感谢。

        1. 我只是比小白好一点,如果要修改也必须自己设置实例然后弄个注册用户来一点点验证代码,目前本地没有刚好的主题,所以懒得弄。你可以试试对这句if( $_POST["comment_post_ID"] == 561 && $_POST["comment_parent"]==0 ) err(__('本文只能作者发布主评论!'));设置个判断,判断作者id是否为管理员id,或者将这个修改后的判断整个移到}else{前面去。

          1. 我在}else{前面加了一句这个,是可以用了,但不知道是否正确或者规范。if(($_POST["comment_post_ID"] == 17602) && ($_POST["comment_parent"]==0) && ($user->ID !=1)) err(__('本文只能作者发布主评论!'));

            1. 你的写法没问题,就是这三个并列条件。

  3. xyixyixyi
    🏅

    添加成功但是别人回复的时候会显示在 公告栏上.

    1. 需要排除非主评论的评论,具体看看官方文档的get_comments函数。

  4. 俺驽钝,没理解这个功能的意义在哪里

    1. 就是吐槽用的,你看看我的吐槽页面,还有首页每日一读下面的那个公告就知道了。

    1. 是的,本来也有想过找你取经的,不过你的公告栏直接就不显示评论框,所以还是问牧风了。

      1. 我囧..你不说我还不知道 上次在测试网站调试成功后......忘了搬到自己网站了 :shock: 下课回去弄

            1. 你是通过css控制内置区分作者和访客的class来隐藏,这不科学。 :mrgreen:

                    1. 看来你比我好奇心还重啊。

                      Windows XP
  5. 好东西!!!

  6. 我突然感觉像变成白痴了,完全没看懂说的什么。评论贴图?

    1. 你看我的评论框就可以外链贴图吧,如果将这个功能专门做在某个页面上不就可以让人随便贴图了,而且还可以设置要审核才能发出来。

发表评论

Submit