【非原创】Wordpress针对已留言用户隐藏用户信息输入框的方法

这功能用了好几年了,我真的忘了是从哪位朋友那里抄来的了。
如有冒犯还望莫怪。
当然,我的办法做了一点小小的改良,优点是不用直接修改comment-template了。

使用前提:
主题模板里评论框调用的是WP默认的 comment_form。

第一步

在主题的functions.php中增加如下代码:

function my_comment_form_field_author_before($field) {
    $commenter = wp_get_current_commenter();
    if ( $commenter ) {
        $name = esc_attr($commenter['comment_author']);
        $email = esc_attr($commenter['comment_author_email']);
    }
    if ( $name ) {
        $comment_part.= sprintf('<div class="form_row"><span> %1$s %2$s <i class="show-form " >[编辑]</i>, 欢迎回来。</span></div>', $name, get_avatar( $email, $size = '24')) ;
    }
    else {
        $comment_part = '<div class="form_row"><span>你好,新朋友。留言前请先填写<b>昵称</b>和<b>邮箱</b>。</span></div>';
    }
    $comment_part .= '<div id="author_info">';
    return $comment_part.$field;
}
add_filter('comment_form_field_author', 'my_comment_form_field_author_before');

function my_comment_form_field_url_after($field) {
    $field .= "</div>";
    return $field;
}
add_filter('comment_form_field_url', 'my_comment_form_field_url_after');

原理:
①通过wp_get_current_commenter函数,识别当前访问者是否曾经留过言。如果已经留过言,通过email地址获取头像。
②给三个输入框套上一层div,方便后面用js一起控制。
③利用了两个WP 的钩子函数,把修改的内容分别放到第一个输入框(author)的前面和最后一个输入框(url)的后面。
注意:
觉得斜体字不顺眼可以改,但是【编辑】两个字套用的class一定要与js里的一致

第二步

在主题的js文件里增加下面两个函数,没有js的自己创建一个:

    $( document ).ready( function() {
        if ( $('.show-form').length > 0 ){
            $('#author_info').toggle(10);
        }
    });

    $(document).on('click', '.show-form', function() {
        $('#author_info').toggle(300);
    });

第一个函数在页面加载的时候调用,当用户上次留言信息存在时,隐藏三个留言者信息输入框。
第二个函数是点击【编辑】时候的响应。

第三步

CSS自理。

已有6条评论

  1. 特意留言测试测试

  2. 我觉得还是我自己那样,不管如何都是输入框不错。(输入框自动载入cookie内容)

    这样,有的人想换个身份还是不错的。2333

    1. 默认设定当然不错

    1. 可能是cookie没保存

  3. 我就是用cookies进行记录信息的

    1. WP 默认就是有cookie 的,中文圈广为流传的那个ajax comment,更是问都不问直接把cookie 存了。
      我这里也是。

  4. 我记得以前是判断本地是否有cookie,然后在判断是否显示信息框

    1. 就是这回事。所以才不敢说原创。

  5. 这个如果可以用在typecho蛮不错的,我去扒扒大神的代码先,(●ˇ∀ˇ●)

    1. 到处都是。而且我估计有typecho直接能用的。

你好,新朋友。留言前请先填写昵称邮箱