Contenido

¿Como mostrar los últimos X comentarios?

16 Jun

+ 12

Despues de mostrar los últimos X posts, ahora le tocan a los comentarios, que es algo más complicado ya que WordPress no incluye nada para hacer esto, pero tenemos muchos plugins que consiguen este resultado.

Plugins

Hacerlo manual 

Tambien podemos montarlo nosotros mismo de una forma muy facil y rápida, aunque más complicada que el tema de los posts.

Se trata de hacer un función en PHP que se encargue de mostrar los últimos comentarios obteniendo los datos directamente de la base de datos.

La función es realmente facil y quedaría algo más o menos asi.

function ult_comments($cuantos = 5) {
    global $wpdb, $table_prefix;
    $comentarios = $wpdb->get_results("
                            SELECT     wc.comment_date, wc.comment_author, wc.comment_author_email,
                                    wc.comment_ID, wp.post_title, wp.guid
                            FROM ".$table_prefix."_comments as wc, ".$table_prefix."_posts as wp
                            WHERE wc.comment_post_ID = wp.ID 
                            AND  wc.comment_approved = '1'
                            ORDER BY wc.comment_date DESC LIMIT 0,".$cuantos.";");
    foreach ($comentarios as $comentario) {
        echo $comentario->comment_author.' escribió en <a href="'.$comentario->guid.'">'.$comentario->post_title.'<a>';
        }           

Bueno, vamos a explicar un poco de que va esto.

La función anterior esta montada para que puedas indicarle la cantidad de comentarios a mostrar, de tal manera que puedes decidir que cantidad de últimos comentarios quieres mostrar.

ult_comments(45); //Mostraríamos los últimos 45 comentarios

Esta función esta a medias, ya que solo obtenemos los datos del comentario y mostramos 3 datos, esto lo podemos extender y conseguir mostrar los últimos X comentarios de forma totalmente personalizada y completa.

Gracias a el uso de la clase WPDB de wordpress podemos acceder facilmente a la Base de Datos del blog y poder realizar la petición de comentarios y almacenerlos en un objeto ($comentarios) para usarlo de forma cómoda.

De esta forma a la altura del foreach ($comentarios as $comentario) { disponemos un array de resultados con los últimos X comentarios y los datos que hemos pedido.


$commentario->comment_date = Fecha del comentario
$comentario->comment_author = Autor del comentario
$comentario->comment_author_email = mail del autor del comentario
$comentario->comment_ID = ID del comentario
$comentario->post_title = Título del post donde se ha realizado el comentario.
$comentario->guid = Enlace al post del comentario.

Ahora te toca mover ficha a ti. Aqui tienes la estructura de la BD de WordPress. Ya no tienes límites a la hora de mostrar tus últimos X comentarios.

  • Yo utilizo Recent comments
    http://mtdewvirus.com/code/wordpress-plugins/
    con una sola funcion y voilà!
    mdv_recent_comments()

  • Excelentes tus explicaciones. Te felicito.
    Probé la implementación en localhost y rodó sin problemas.
    Mis necesidades al respecto se limitan a relacionar los últimos comentarios, mostrando únicamente Autor y Post comentado; el primero ni siquiera con enlace. Bajo esta perspectiva, da un buen resultado el plugin de Edmundo Hidalgo (Real Fast Latest Comments) que inicialmente probaré en el server (cuando acabe su mantenimiento).
    Darte las gracias por tu inestimable ayuda.
    Un cordial saludo.

  • Una forma buena y fácil de hacerlo (que yo uso) es utilizando alguna herramienta que ponga feeds en el blog. Y leer el feed de los comentarios.

  • Si, Daniel. Es una muy buena idea. Aunque tendríamos que parsear el XML de los feeds.

    Bueno, se uso lo que se use, es normal que tengamos que hacer algo 😀

  • Será que soy muy torpe, pero ¿en que parte del código se pone la función? Es que lo estoy intentando y no hay manera. Necesito una explicación tipo del «barrio sésamo». Gracias!!

  • Buenas AnGiE, se supone que eso debes ponerlo o en un fichero externo, por ejemplo functions.php, de tu theme o en el mismo fichero donde quieres mostrar, por ejemplo sidebar.php de tu theme.

    Hay que tener en cuenta que es una función PHP y por ello tendrás que añadirle los tags pertinentes.

    <
    function ult_comments($cuantos = 5) {
        global $wpdb, $table_prefix;
        $comentarios = $wpdb->get_results("
                                SELECT     wc.comment_date, wc.comment_author, wc.comment_author_email,
                                        wc.comment_ID, wp.post_title, wp.guid
                                FROM ".$table_prefix."_comments as wc, ".$table_prefix."_posts as wp
                                WHERE wc.comment_post_ID = wp.ID
                                AND  wc.comment_approved = '1'
                                ORDER BY wc.comment_date DESC LIMIT 0,".$cuantos.";");
        foreach ($comentarios as $comentario) {
            echo $comentario->comment_author.' escribió en <a href="'.$comentario- rel="nofollow">guid.'">'.$comentario->post_title.'</a>';
            }          
    >

    Aunque no sé si en Blogspot podrás editar el theme.

  • Pues creo que no se puede. O yo soy muuuy torpe.
    Gracias de todos modos.

  • Bueno..si no me equivoco esto se aplica a una versión ya vieja del WP… ahora con la nueva versión ya no se necesitan plugins para hacer esto.

  • ohhhhhhhh!!!!!!!!
    bendito seas 2knieto.
    No sabes el tiempo que he dedicado a buscar el codigo para poner los ultimos comentarios. ya es muy tarde asi es que sdejare la web en mis favritos y mañana reviso con detencion la forma de poner los ultimos comentarios en mi blog.

    ahora a descansar. Estar mucho rato frente eal pc me ha traido serios problemas a la espalda.
    y a la vista.

    esto es un vicio

  • Muchas gracias por compartir este código, me ha fincionado muy bien aunque tuve que quitar el guion bajo de los nombres de las tablas porque $table_prefix ya lo incluia. Tambien añadí el contenido del comentario por si a alguien le interesa:

    
    get_results("SELECT     wc.comment_date, wc.comment_author, wc.comment_author_email,
                                        wc.comment_ID, wc.comment_content, wp.post_title, wp.guid
                                FROM ".$table_prefix."comments as wc, ".$table_prefix."posts as wp
                                WHERE wc.comment_post_ID = wp.ID
                                AND  wc.comment_approved = '1'
                                ORDER BY wc.comment_date DESC LIMIT 0,".$cuantos.";");
        foreach ($comentarios as $comentario) {
            echo ''.$comentario->comment_author.' escribió en guid.'">'.$comentario->post_title.''.$comentario->comment_content.'';
            }
    }
    ult_comments();
    ?>
  • Gracias Andrés por el código, funciona muy bien, pero quiero preguntarte si hay alguna manera de que no se publiquen comentarios de un comentarista en especial, o sea que los comentarios sean recibidos pero no se publiquen en el listado de últimos comentarios. Por ejemplo no publicar los comentarios del autor. Espero haberme explicado, gracias

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.