Thepre_get_comments
hook注意,单个帖子的评论是用get_comments()
, 在comment_template()
作用
这个get_comments()
函数只是WP_Comment_Query
对象包装器,因此我们可以使用pre_get_comments
钩
示例#1user_id
限制示例:
! is_admin() && add_action( \'pre_get_comments\', function( \\WP_Comment_Query $q )
{
if( $uid = get_query_var( \'author_id_to_limit\' ) )
$q->query_vars[\'user_id\'] = (int) $uid;
});
您可以在其中添加更多约束,以便不修改其他注释列表。
示例#2
我们可以通过以下方式对其进行更多限制:
// Let\'s begin where the main loop starts:
add_action( \'loop_start\', function( \\WP_Query $q )
{
// Target the main loop
if( ! in_the_loop() )
return;
// Modify the get_comments() call
add_action( \'pre_get_comments\', function( \\WP_Comment_Query $q )
{
if(
$uid = get_query_var( \'author_id_to_limit\' ) // Get the user input
&& ! did_action( \'wpse_mods\' ) // Run this only once
) {
// Set the comment user id
$q->query_vars[\'user_id\'] = (int) $uid;
// Activate the temporary action
do_action( \'wpse_mods\' );
}
});
});
也就是说,我们要瞄准第一个
get_comments()
在主循环开始后调用。
您可以使用其他挂钩,一些主题有特定的挂钩,可能更容易定位。
相应地修改注释计数
如果要修改显示的注释编号,则可以使用
get_comments_number
滤器
这个get_comments_number()
函数使用comment_count
$post对象的属性,该属性源自wp_posts
桌子所以这对我们没有帮助。
相反,我们可以重新使用注释查询来更新注释编号,正好在临时wpse_mods
只启动一次操作(您可能需要根据需要进行调整)
! is_admin() && add_action( \'the_comments\', function( $comments, \\WP_Comment_Query $q )
{
$request = $q->request;
add_filter( \'get_comments_number\', function( $number ) use ( $request )
{
// Override the comments number after our previous modifications
if( 1 === did_action( \'wpse_mods\' ) )
{
global $wpdb;
// Modify the comments query to our needs:
$number = $wpdb->get_var(
str_replace(
\'SELECT * \',
\'SELECT COUNT(*) \',
$request
)
);
}
return $number;
} );
return $comments;
}, 10, 2 );