Obtenga todos los comentarios en una publicación de una variedad de usuarios

5 minutos de lectura

avatar de usuario
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?

avatar de usuario
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 );

  • Esto parece funcionar muy bien. ¿Pone el último comentario en $comentarios?[0]? Creo que sí, pero no veo eso en SELECCIONAR, así que solo verifico con usted.

    –Drew Baker

    18 de julio de 2013 a las 17:36

  • Usar echo '<pre>' . print_r( $comments, true ) . '</pre>'; o un var_dump( $comments ) para inspeccionar su contenido. yo suelo fuegoPHP depurar.

    – brasofilo

    18 de julio de 2013 a las 17:41


  • Perdón por el comentario mal redactado. Lo intentaré de nuevo: ¿Esta consulta respeta el orden de clasificación por fecha descendente?

    –Drew Baker

    18/07/2013 a las 20:55

  • Esto tampoco parece buscar publicaciones aprobadas. ¿Qué debo modificar para obtener solo comentarios aprobados?

    –Drew Baker

    19/07/2013 a las 18:30

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.

  • Up votó esto debido a la preparación. Pero brasofilo se te adelantó. ¡Gracias!

    –Drew Baker

    19 de julio de 2013 a las 16:55

  • Ni siquiera probé con wpdb->preparecomo había este hilo reciente en [wp-hackers], Pensé que también fallaría en este caso. Solo por curiosidad, ¿probaste esto, Hieu? Lo probé y vuelve 0 resultados…

    – brasofilo

    20 de julio de 2013 a las 1:09

  • No, no realmente, posiblemente también causaría un error en mi código hmm

    – Hieu Nguyen

    20 de julio de 2013 a las 1:24

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

avatar de usuario
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

  • No puede usar una matriz para el parámetro ‘user_id’ en get_comments.

    –Drew Baker

    18 de julio de 2013 a las 16:26

  • lo siento, he agregado antes del primer código solo los comentarios de un usuario, así que agregue un cambio para obtener varios comentarios de los usuarios.

    – Ravi Patel

    19 de julio de 2013 a las 4:32


avatar de usuario
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");

  • No puede usar una matriz para el parámetro ‘user_id’ en get_comments.

    –Drew Baker

    18 de julio de 2013 a las 16:26

  • lo siento, he agregado antes del primer código solo los comentarios de un usuario, así que agregue un cambio para obtener varios comentarios de los usuarios.

    – Ravi Patel

    19 de julio de 2013 a las 4:32


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad