限制根据user_id显示的评论

时间:2015-09-11 作者:Shahrukh Khan

如何限制页面上显示的评论-reviews 通过author_id.

假设author_id 限制为处于变量中$author_id_to_limit.

请告诉我如何钩住函数来实现这一点。

我甚至想知道如何用这个cuurent查询编辑帖子的编号。

2 个回复
最合适的回答,由SO网友:birgire 整理而成

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 );

SO网友:jas

Hi只需要使您的函数获得注释,然后在所需的位置使用您的函数输出。

<?php get_comments( $args ); ?>

<?php $args = array(
\'user_id\' => $author_id_to_limit, ); 

get_comments( $args ); ?>
像我在上面的代码中所做的那样,为变量设置数字。其余参数请相应填写。

有关详细信息,请访问以下链接:

get_comments