Uno de los elementos mas interesantes en tu barra lateral puede ser mostrar aquellos posts que han sido mas comentados, los que provocaron mas debate, incluso discusión. No serán quizás tus mejores posts, pero si aquellos que llegaron a mas gente, los que provocaron la reacción de tus lectores, y tanto tu como tus visitantes podéis aprender de ello, y revisarlos.
Conseguir un widget que muestre tus posts mas comentados es realmente fácil y tienes 2 maneras de hacerlo, la simple y con la que aprendes. Como siempre veremos las dos.
1. El Modo Simple
Como puedes imaginar, el modo sencillo de conseguirlo es utilizar plugins. Yo personalmente recomiendo 2, que son estos:
- Popularity Contest – Utiliza tanto comentarios como trackbacks para mostrar tus posts mas populares
- AutoInfo – Muy completo, que muestra mucha mas información de tu blog
2. El Modo Didáctico
Siempre es el que recomendamos, no solo porque no cargas tu blog de plugins que requieren mas consumo de memoria sino porque además aprendes y mejoras tu cualidad como blogger completo.
Tienes que hacer solo 2 pasos. El primero es añadir este código al fichero ‘header.php
‘ de tu plantilla, justo antes de la etiqueta </head>:
<?php function entradas_mas_comentadas($no_posts = 3, $before = '<li>', $after = '</li>', $show_pass_post = false, $duration='') { global $wpdb; $request = "SELECT ID, post_title, COUNT($wpdb->comments.comment_post_ID) AS 'comment_count' FROM $wpdb->posts, $wpdb->comments"; $request .= " WHERE comment_approved = '1' AND $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status = 'publish'"; if(!$show_pass_post) $request .= " AND post_password =''"; if($duration !="") { $request .= " AND DATE_SUB(CURDATE(),INTERVAL ".$duration." DAY) < post_date "; } $request .= " GROUP BY $wpdb->comments.comment_post_ID ORDER BY comment_count DESC LIMIT $no_posts"; $posts = $wpdb->get_results($request); $output = ''; if ($posts) { foreach ($posts as $post) { $post_title = stripslashes($post->post_title); $comment_count = $post->comment_count; $permalink = get_permalink($post->ID); $output .= $before . '<span class="removed_link" title="' . $permalink . '">' . $post_title . '</span> (' . $comment_count.')' . $after; } } else { $output .= $before . "No hay nada" . $after; } echo $output; } ?>
En este código puedes mostrar mas de 3 posts, digamos 5 por ejemplo. Para ello solo tienes que cambiar la parte $no_posts = 3
por el número de posts que desees mostrar.
Una vez guardado este código en el archivo ‘header.php
‘ ahora solo hay que llamar a ese código desde donde quieres que se muestre, normalmente en la barra lateral. Abrimos el archivo ‘sidebar.php
‘ de tu plantilla, y allí donde quieras que se vean tus posts mas comentados añades este código:
<?php entradas_mas_comentadas(); ?>
¿Ves como así también es fácil?
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Hola que buen post, pero me surgio una pequeña consulta, en la forma didáctica como puedo usar el codigo en el header.php para mostrar los post más comentados por fecha, por ejemplo , los post más comentados de la semana o del mes?.
Saludos
Mauro
Hola, me gusto mucho el post, en especial por el Codigo.
Aunque me gustaria que se comentara un poco el codigo, no es por ponerme de exigente con su grandioso trabajo verdad, pero de esa manera se podria interpretar un poco mejor no cren.?
mi humilde opinon sin ofensa alguna.
Saludos y muchas gracias.
Básicamente es una función que recibe estos parámetros:
número de posts, etiqueta antes, etiqueta después, si tiene contraseña el post (show_pass_post) i duración.
Hace una consulta del tipo: selecciona identificador (ID), titulo (POST_title) y número de comentarios que esten aprovados y publicados. opcionalmente que tengan password o no (show_pass_post) y nº de días (duración) desde hoy. Los agrupa por ID (esto lo hace para poder contar correctamente) y por último los ordena descendientemente (DESC de mayor a menor) por el número de comentarios y selecciona solo los necesarios (numero de posts).
El resultado de esta consulta se pone en la variable post que será un array. Con el foreach recorremos el array y vamos creando los links que se irán concatenando en la variable output. Cualquier cambio de formato lo puedes hacer en la varibale output linea 16.
Por último imprimimos el output que será el código que se mostrará cuando en el código llamemos a la función. Al poner posts_mas_comentados() significa que cogerá los valores por defecto, es decir 3 comentarios, tag antes li, tag despues /li, mostrar posts sin password y todos los posts de tu blog.
Si quieres que salgan 5 posts de los ultimos 10 dias sería algo así la llamada.
posts_mas_comentados(5,»,»,»,10);
Espero haberlo explicado mas o menos. Gracias!
Hola,
Para que funcione el codigo le faltaría poner que es una función.
O sea,
<?php
function posts_mas_comentado
…
Gracias por el codigo es muy bueno.
Lo acabo de probar en mi blog y sale correcto. Solo un detalle, en el primer código (el que va en el header.php) en la función falta poner al principio la palabra reserva function es que sino casca.
Sería algo como function posts_mas_comentados
Gracias, hacia tiempo que quería poner esto! No pensaba que fuese tan fácil.
Se agradece el dato.
Sip Chefwww muy buena tu explicacion lo ire checando detenidamente con detalle, saludos man.
y si quiero que me aparezca en mi sidebar como un widget de texto? por si añado la llamada no aparece nada.
Gracias
A mi al principio me pasó lo mismo que no salía. Quizás era problema de la caché, prueba de borrarla.
La llamada tal como la tengo ahora es así:
[li id=»top-comments» class=»widget widget_archive»][h2 class=»widgettitle»]Top comentarios[/h2] [ul]
[?
posts_mas_comentados();
?]
[/ul]
Cambia los corchetes por menor y mayor.
Supongo que donde pone widget_arhive le puedo poner otra cosa como widget_top, pero como me funcionó lo dejé así.
Gracias!
Muchas gracias, yo que no soy experto en wordpress, hasta lo he sabido utilizar. Cuenta con mi voto en el concurso.
Una manera más limpia de usar este script, es meterlo dentro de function.php y luego invocar la función donde la necesitemos, así lo hice yo y funcionó perfectamente.
Pues si que tienes razón Angelfire, es mucho mas limpio. Buen apunte 😉
Me gustaria que solo muestre los post mas comentados pero no de todo el blog sino de ciertas categorias que yo selleccione. Se puede hacer?
Saludos
Hola, ya encontraste la solución a dicho problema?, yo me encuentro en ese dilema, como hacer que se muestren los posts mas comentados de una categoría.. te agradecería si tuvieras la respuesta.,..
gracias..
y cómo se mete en function.php y luego se invoca? gracias
Ahora mismo no se hacer lo que comentas Juani. Ya lo miraré más a fondo a ver. Por el momento no veo una tabla de categorías… tengo que analizar como relaciona una categoria con una entrada… alguien sabe algo ?
Buenas! Use el codigo y me salían los permalinks del tipo http://nombredeblog/nombredelpost/?phpMyAdmin=xxxxxxxxxxxxxxxx.
Borré solo esa parte del código ("?phpMyAdmin=xxxxxxxxxxxxxxxx" en el que se agrega en header.php) y me funcionan perfecto. Aviso por si a alguno de interesa. (Por ahi es normal que se vean asi y todo, solo es que a mi me parecia raro)
Saludos!
Tambien he quitado lo mismo que Isabel ?phpMyAdmin=xxxxxxxxxxxxxxxx . Al fin no entendi para que iba eso alli, alguien podría explicarme '? .. por lo demas todo funciona muy bien, estoy muy agradecido
Bueno, me parece que eso se puede reemplazar por #comments y así al hacer click se dirija a los comentarios del post en cuestión. 😉
¿Que no se puede meter el codigo php en el archivo functions.php y llamarlo despues?
Hola, quisiera saber cómo puedo darle un poco de arreglo al CSS así como mostrar un Título ya que no puedo ponerlo como Widgets…
Hola Fernando. Quisiera saber por qué en el código que das, se le agrega esto a los permalink:
?phpMyAdmin=3e6c4943d9a6t7c8283c
Saludos
Está mal el código, se debió truncar en alguna migración, es un post antiguo. Ya lo he arreglado, gracias por avisar