
dibujó panadero
Estoy tratando de obtener todos los comentarios de una publicación de una variedad de usuarios.
Esto es lo que me gustaría poder hacer:
$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 );
Ahora obviamente esto no funciona, pero eso es lo que me gustaría hacer. ¿Hay alguna otra manera de lograr esto? ¿Quizás usando una selección personalizada?

brasofilo
He construido una consulta WPDB basada en la query
método de WP_Comment_Query
clase. Y haciendo la sanitización a base de esta publicación del foro.
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 );
Un simple SELECT
consulta haría:
$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
Espero que esto ayude.
Podemos usar el OR
condición en MySQL para hacer esto.
Si tuviera que escribir la consulta que queremos usando los valores que proporcionó, podría hacerse algo como esto:
SELECT * FROM comments WHERE comment_post_ID='57' AND (user_id='10' OR user_id='22' OR user_id='41' OR user_id='80')
Ahora, podemos hacer esto dinámico y procesable por 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[].
}
Antes de usar esto, asegúrese de estar conectado a la base de datos de WordPress correctamente antes de usar esto y de que todas las tablas y campos que he enumerado sean correctos para su instalación primero.
pega este código en 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';
}
}
use esta función en cualquier lugar que desee llamándola ID de usuario de parámetros requeridos e ID de publicación.
print_r( users_comment(1,array(1,4,3)) );

Ravi Patel
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;
?>
Para múltiples usuarios, obtenga un comentario usando la identificación de la publicación:
$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

M Khalid Junaid
Como Brasofilo ya le proporcionó la consulta personalizada para obtener los comentarios, pero obtendrá todos los comentarios mientras estaban en la papelera.
$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");