WordPress nos da una serie de clases para trabajar con los elementos mas importantes, en este caso existe una clase solo para trabajar con comentarios y nos va a permitir realizar consultas de manera facil y comoda.
Y la clase en cuestion es WP_Comment_Query
<?php $args = array( // args here ); // Opcion 1 $comments_query = new WP_Comment_Query; $comments = $comments_query->query( $args ); // Opcion 2 y la mas comoda $comment_query = new WP_Comment_Query( $args ); ?>
Aqui teneis dos formas de llamar a WP_Comment_Query, donde la opcion 2, se le pasa en su constructor un array con los argumentos o digamos lo que queremos buscar.
En los argumentos le pasaremos las opciones que queremos, por ejemplo los últimos comentarios, los comentarios spam ,… lo que mas nos interese.
Bucle
Una vez que tenemos los resultados de la busqueda en nuestra variable $comments, lo primero que hacemos es preguntar si existen comentarios, siempre debemos hacer esta comprobación, no solo aquí sino en todos lados, asi comprobamos si viene a vacio y evitamos errores.
Si existen comentarios, entonces con el foreach podremos recorrerlo e ir mostrando los datos.
<?php $args = array( // argumentos aqui ); // hacemos la peticion a la base de datos $comments = new WP_Comment_Query( $args ); // Comienza el bucle if ( $comments ) { foreach ( $comments as $comment ) { echo '<p>' . $comment->comment_content . '</p>'; } } else { echo 'No comments found.'; } ?>
Como veis es sencillo y es el ejemplo que viene en la pagina oficial
Si queréis saber que información viene en los comentarios siempre podemos hacer lo siguiente y con var_dump pintaremos la informacion. Con la etiqueta pre lo pintaremos mejor y sera mas legible.
// Comienza el bucle if ( $comments ) { foreach ( $comments as $comment ) { echo '<pre>'; var_dump($comment); echo '</pre>'; } } else { echo 'No comments found.'; }
// Comienza el bucle if ( $comments ) { foreach ( $comments as $comment ) { echo '<pre>'; var_dump($comment); echo '</pre>'; } } else { echo 'No comments found.'; }
Argumentos en $args.
<?php $args = array( 'author_email' => '', 'author__in' => '', 'author__not_in' => '', 'include_unapproved' => '', 'fields' => '', 'ID' => '', 'comment__in' => '', 'comment__not_in' => '', 'karma' => '', 'number' => '', 'offset' => '', 'orderby' => '', 'order' => 'DESC', 'parent' => '', 'post_author__in' => '', 'post_author__not_in' => '', 'post_id' => 0, 'post__in' => '', 'post__not_in' => '', 'post_author' => '', 'post_name' => '', 'post_parent' => '', 'post_status' => '', 'post_type' => '', 'status' => 'all', 'type' => '', 'type__in' => '', 'type__not_in' => '', 'user_id' => '', 'search' => '', 'count' => false, 'meta_key' => '', 'meta_value' => '', 'meta_query' => '', 'date_query' => null, // See WP_Date_Query ); ?>
Como veis hay una gran cantidad de campos que podemos usar para filtar nuestras busquedas. Solo hay que poner los que necesitemos, no es necesario rellenarlos todos
Por ejemplo si quereis buscar los comentarios por el email del autor que lo ha creado podeis hacerlo asi:
$comment_query = new WP_Comment_Query( array( 'author_email' => 'xxxx') );
Si quereis varios campos en la busqueda podeis usarlos con una coma.
$comment_query = new WP_Comment_Query( array( 'meta_key' => 'featured', 'meta_value' => '1' ) );