在默认留言widget中屏蔽已注册用户的方法

之前都是粗暴地修改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 。

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