获取一组用户对帖子的所有评论

时间:2013-07-14 05:22:33

标签: wordpress comments

我正试图通过一系列用户从帖子中获取所有评论。

这是我希望能够做到的:

$user_ids = array(10, 22, 41, 80);
$post_id = 57;

$args = array (
    'number'   => -1,
    'user_id'  => $user_ids,
    'post_id'  => $post_id,
    'status'   => 'approve',
    'order'    => 'DESC'
);
$comments = get_comments( $args );

现在显然这不起作用,但这就是我想要做的。有没有其他方法来实现这一目标?也许使用自定义选择?

6 个答案:

答案 0 :(得分:1)

我已根据WP_Comment_Query类的the query method构建了一个WPDB查询。并根据this forum post进行清理。

global $wpdb;

// Sanitize
$post = '1148';
$post = absint($post);

// Sanitize
$a = '2'; // User One
$b = '3'; // User Two
$user_ids = array_map( 'absint', array( $a, $b ) );
$user_ids = implode( ', ', $user_ids );

$query = "SELECT * FROM $wpdb->comments 
        WHERE comment_post_ID = $post 
        AND user_id IN ($user_ids) 
        AND comment_approved = 1
        ORDER BY comment_date DESC";
$comments = $wpdb->get_results( $query );

答案 1 :(得分:1)

一个简单的SELECT查询可以:

$query = "SELECT * FROM $wpdb->comments 
          WHERE comment_post_ID = %d 
             AND comment_approved = 1
             AND user_id IN %s
          ORDER BY comment_date DESC"; // get only approved comment and sort by date

$comments = $wpdb->get_results($wpdb->prepare(
    $query, 
    intval($post_id), 
    '('.implode(',', array_map('intval', $user_ids)).')'
)); // use prepare to prevent SQL injection

希望这有帮助。

答案 2 :(得分:0)

我们可以使用MySQL中的OR条件来执行此操作。

如果我要使用您提供的值编写我们想要的查询,可以这样做:

SELECT * FROM comments WHERE comment_post_ID='57' AND (user_id='10' OR user_id='22' OR user_id='41' OR user_id='80')

现在,我们可以通过PHP使其动态化和可处理:

// The User IDs and Post ID (make sure you are escaping these properly).
$user_ids = array(10, 22, 41, 80);
$post_id = 57;

foreach($user_ids as $uid){     $user_ids_string .= " OR user_id='$uid'";   }       // Loop through each user and append their ID to the query segment.
$user_ids_string = substr($use, 4);                                                 // Remove the unnecessary first " OR "

$query = mysql_query("SELECT * FROM comments WHERE comment_post_ID='$post_id' AND ($user_ids_string)");     // Create the final MySQL Query.
while($row = mysql_fetch_array($query)){
    // Do something with each $row[].
}

在使用此功能之前,请确保在使用此功能之前已正确连接到WordPress数据库,并且我列出的所有表格和字段均适用于您的安装。

答案 3 :(得分:0)

将此代码粘贴到functions.php

function users_comment( $postid = null , $users = array() ){
    if( ! empty( $users ) && $postid ){

        foreach ($users as $user) {
            $args = array (
                'number'   => '',
                'user_id'  => $user,
                'post_id'  => $postid,
                'status'   => 'approve',
                'order'    => 'DESC'
            );
            $comments[] = get_comments( $args );
        }
    return $comments;
    }else{
        return 'Please provide a user id and postid';
    }
}

通过调用所需参数user id和post id,在任意位置使用此函数。

print_r( users_comment(1,array(1,4,3)) );

答案 4 :(得分:0)

only single user to get post:
$args = array(
    'status' => 'approve',
    'number' => '-1',
    'post_id' => 57,
        'user_id'  => 1,
        'order'    => 'DESC'
);
$comments = get_comments($args);
foreach($comments as $comment) :
    echo($comment->comment_author . '<br />' . $comment->comment_content);
endforeach;
?>
  

对于多个用户使用帖子ID获取评论:

$args = array( 'user_id' => 0 );
add_filter( 'comments_clauses', 'custom_comments_clauses');
$comments = get_comments( $args );
remove_filter( 'comments_clauses', 'custom_comments_clauses');

function custom_comments_clauses( $clauses ){
    $clauses['where'] = str_replace( 'user_id = 0',
                       'user_id IN (1, 2, 3)',
                       $clauses['where'] );
    return $clauses;
}

https://wordpress.stackexchange.com/questions/105010/get-comments-only-for-certain-specific-users-in-template-file

答案 5 :(得分:0)

由于Brasofilo已经为您提供了自定义查询以获取评论,但它会在被删除时获取所有评论

$user_ids = array(10, 22, 41, 80);
$post_id = 57;
global $wpdb;

$comments=$wpdb->get_results("SELECT * FROM `wp_comments` WHERE 
`comment_post_ID` =$post_id AND `user_id` IN (".join(',',$user_ids)")
 AND `comment_approved` ='1' ORDER BY `comment_date` DESC");