之前都是粗暴地修改Decent_Comment类的query函数,在其sql语句中增加内容。坏处是WP每次升级都需要修改,而且可能影响其它调用get_comments()函数的地方。
今天研究了一下代码,放出一个最符合WP原理的修改办法。
这种方法利用的原理是,所有未注册用户的id都是0。所以对于那种要求注册后再留言的博客,请不要采用该方法。
在functions.php中加入如下代码:
function before_get_comments($args) { $args['user_id'] = 0 ; return $args ; } add_filter( 'widget_comments_args', 'before_get_comments' );
喜欢拿来主义的,看到上面就够了。
========
下面开始讲解原理。
在default-widget.php里,原生的comment widget给开了一个小口子:
$comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' ) ) );
这段的意思是,调用get_comments()函数取得留言,默认参数是number,status和post_status…但允许通过“widget_comments_args”这个过滤项对参数进行过滤。
“过滤”这个词可能会引起误会。实际在WP中,filter的用途非常广泛,相当于回调函数的用法。apply_filters的意思是在某处增加一个“关卡”。返回值要经过这个“关卡”的处理,否则取默认值。
增加的部分就简单了,即增加widget_comments_args的过滤项,在参数中多设一个user_id = 0 。