Desde hace unos minutos Mangas Verdes cuenta con nueva sección: ‘La Portada de los Lectores‘, una portada alternativa a la oficial y que, a diferencia de ésta, no muestra los posts por orden cronológico, sino según el interés que haya despertado cada entrada en los usuarios. Funciona de forma similar a los sitemas empleados en Digg, Menéame o Fresqui, pero a la inversa. Es decir, los posts más votados irán en la página alternativa, y los nuevos en la página de inicio oficial.
Se trata de una ampliación del plugin Recommed It de Tobsn, que permite promover posts que luego aparecen en una lista en el sidebar, especialmente como orientación para los nuevos lectores de una bitácora. Se me ocurrió que el sistema podría valer para habilitar una nueva sección en la que se recogiera también, como si de una portada se tratara, las entradas de mayor interés para la comunidad. Y me puse manos a la obra.
De esta forma, damos un paso más en la ‘conversación’ ofreciéndole al lector la posibilidad de influir también en la lectura del resto de usuarios, recomendando aquello que le parezca de mayor interés y estructurando los contenidos del blog en base a sus inquietudes. De la misma forma, me sirve a mí para tomar el pulso general de la bitácora.
La mecánica es muy sencilla: al final de cada artículo encontrarás un botón con el rótulo ‘Promueve este post‘. Pulsando sobre él habrás emitido un voto que contabilizará, junto al del resto de usuarios, para determinar los posts que saltarán a la portada de los lectores. Sólo se puede votar una vez por post, aunque se puede votar por todos los posts que uno quiera.
Aún quedan por perfeccionar algunas cosillas, pero la página ya está más que presentable. Para acceder a ella tan sólo debes pinchar en la pestañita que aparece a la derecha de la fecha en el primer post de la página de inicio.
Si quieres implementar este sistema en tu blog, tan sólo debes seguir los siguientes pasos:
a) descargarte el plugin original e instalarlo siguiendo las instrucciones.
b) añadirle el código que he preparado, siempre dentro de las etiquetas PHP del plugin:
(los códigos han sido traspasados al comentario #17 de este post porque aquí me daban algunos problemas)
Lógicamente, cambia los estilos css por los de tu propio theme (h4 y div class).
c) Crea una nueva página en tu WordPress.
d) Inserta el código <?php get_portada(); ?> en la página.
e) Para mostrar un número de posts distinto a 18 en la página, pon algo similar a <?php get_portada(10); ?>. O 5, o lo que prefieras.
Espero que te sea útil y tu participación
Un saludo.
Actualización (11 mar-13.30 h): He modificado el código para mostrar en la portada de los lectores el número de votos de cada post. Así que si te interesa esta nueva funcionalidad, debes implementar estas líneas en lugar de las anteriores (modifica el css a tu gusto):
(los códigos han sido traspasados al comentario #17 de este post porque aquí me daban algunos problemas)
Éste es el css afectado:
(los códigos han sido traspasados al comentario #17 de este post porque aquí me daban algunos problemas)






















{ 46 comentarios }
← Comentarios antiguos
Ey…buena!
Ya que tengo el plugin recomendit instalado voy a ver si lo trasteo y lo pruebo ¡muy buena idea!
Saludos
Muy bueno, me encanta la idea de darle mas participación y opciones a los usuarios.
Si mañana tengo algo de tiempo sale post, realmente la idea esta muy buena.
Saludos!
Ya sólo te falta ofrecer correo electrónico a tus lectores y tendrás un portal, más que un blog.
Esto sí es crear comunidad
Ya no sabes que inventar, jeje. Me parece una idea genial, como todas las tuyas. Sigue así
Siempre innovando Manuel. Eres grande man. !!
Muy bueno!!
Lo único que no me acaba de funcionar es la nueva página. Le inserto el código pero no consigo ver los posts más votados.
Estupenda iniciativa. Muy original y útil. Saludos.
OK. Les dejo la plantilla que he creado para la página. La he llamado ‘lectores.php’ y está adaptada a mi theme, aunque puede servir de modelo para que cada uno la adapte al suyo. Está basada en mi ‘index.php’, modificado para la ocasión. Copia las líneas en un archivo de texto, renómbralo ‘lectores.php’ y súbelo a la carpeta raíz de tu theme:
< ?php/*
Template Name: Lectores
*/
?>
< ?php get_header(); ?>
< ?php if (have_posts()) : ?>
< ?php while (have_posts()) : the_post(); ?>
" rel="bookmark" title="Permanent link to < ?php the_title();?>">< ?php the_title(); ?>
< ?php endwhile; ?>
< ?php else : ?>
Error
< ?php _e("Sorry. No posts."); ?>
< ?php include (TEMPLATEPATH . "/searchform.php"); ?>
< ?php endif; ?>
< ?php get_sidebar(); ?>
< ?php get_footer(); ?>
MangasVerdéame! XD
Felicidades por la idea, a ver que tal sale
Manuel…que alegra ver la actualización ya que anoche no fui capaz de hacerlo.
Volveré a la carga esta tarde a ver si soy capaz.
Saludos
Me rindo , cuando añado el código al recommendit da error, y ya no se donde mirar, la teoría que cobra más fuerza es mi torpeza natural.
Ya queda menos para lograrlo, ya queda menos…
Me salio esto:
Fatal error: Call to undefined function: snippet_charos() in /home/mangas/public_html/wp-content/plugins/recommendit.php on line 97
Sí, Ordago, es que aún ando trasteando con el código y de cuando en cuando se desconfigura. Ya está listo.
Un saludo.
Bueno… yo también lo he modificado, y adaptado a mi blog. Espero que te guste cómo ha quedado. Échale un vistazo: http://blog.oscarpascual.com.
He modificado el script de la siguiente manera, para adaptarlo a mi interfície.
function get_portada( $limit = 18 ) {
global $wpdb, $table_prefix;
$recs = $wpdb->get_results( 'SELECT p.ID,p.post_title,p.post_content,p.post_author,p.post_date,u.display_name,r.rec FROM '.$table_prefix.'recit AS r, '.$table_prefix.'posts AS p, '.$table_prefix.'users AS u WHERE p.ID = r.id_post AND p.post_password = "" AND p.post_date post_content);
$content = str_replace(']]>', ']]>', $content);
echo 'ID).'" rel="bookmark">'.$post->post_title.'';
echo ''.apply_filters('the_time', date('j F Y'), 'j F Y').' - '.$post->display_name.'';
if ($post->rec == 1) {
echo '1 vot';
} else {
echo ''.$post->rec.' vots';
}
echo '';
echo ''.$content.'';
echo '';
}
//}
}
Un saludo cordial!
Tiene muy buena pinta, Oscar. Muy bien estructurado. Corro a probarlo. Felicidades.
Un saludo.
Copio aquí los códigos útiles que he usado porque en el post me daban algunos problemas:
Código inicial
function get_portada( $limit = 18, $chars = 60) {
';'.$post_content.'
global $wpdb, $table_prefix;
$recs = $wpdb->get_results( 'SELECT p.ID,p.post_title,p.post_content FROM '.$table_prefix.'recit AS r, '.$table_prefix.'posts AS p WHERE p.ID = r.id_post AND p.post_password = "" AND p.post_date < "'.current_time('mysql').'" AND p.post_status = "publish" ORDER BY r.rec DESC LIMIT '.(int)$limit );
if( $recs ) {
foreach( $recs as $post ) {
$post_title = htmlspecialchars(stripslashes($post->post_title));
$post_content = stripslashes($post->post_content);
echo '
ID).'">'.snippet_chars( $post_title, $chars ).'
';
echo '
echo '
';
echo '
';
}
}
}
Código con caja de votos
function get_portada( $limit = 18, $chars = 100) {
';';'.$count.'
votos';
'.$post_content.'
global $wpdb, $table_prefix;
$recs = $wpdb->get_results( 'SELECT p.ID,p.post_title,p.post_content,r.rec FROM '.$table_prefix.'recit AS r, '.$table_prefix.'posts AS p WHERE p.ID = r.id_post AND p.post_password = "" AND p.post_date < "'.current_time('mysql').'" AND p.post_status = "publish" ORDER BY r.rec DESC LIMIT '.(int)$limit );
if( $recs ) {
foreach( $recs as $post ) {
$post_title = htmlspecialchars(stripslashes($post->post_title));
$post_content = stripslashes($post->post_content);
$count = $post->rec;
echo '
ID).'">'.snippet_chars( $post_title, $chars ).'
';
echo '
echo '
echo '
';
echo '
echo '
';
echo 'ID).'">vota';
echo '
';
echo '
';
echo '
';
}
}
}
CSS de la caja de votos
#votos {float: left;
width: 50px;
height: 80px;
text-align: center;
color: #002d00;
padding: 3px;
margin: 8px;
border: 1px solid #002d00;
}
.votos a {
color: #666600;
text-decoration: none;
}
.numero {
font-family: verdana, helvetica, sans-serif;
font-size: 32px;
}
. vota {font-size: 12px;}
Pues ya lo tengo funcionando y como mucho intentaré “pelear” el diseño de las cajas de voto cuando vuelva a tener ganas de trastear.
He colocado un banner-pizarra a “La portada de los lectores” (Manuel, si quieres alguna imagen alguna vez ya sabes)
Ahora aprovecho para darte las gracias “oficiales” con testigos
Muy wapa la pizarra. Si me animo ya te la pediré prestada
Felicidades, otra vez.
Un saludo.
Manuel.. de la puta madre.. que BUENO esto che.. felicitaciones
voy a pensar como implementarlo tambien
you have to remove the htmlspecialchars() if you use snippet_chars() because it would double encode it like "e; => & amp;quote;
i fixed that in the version on my blog (see url)
oh and i added some small “fixes”
#Mariano: Muchas gracias.
#Tobias: many thanks for the plugin and for include the function in your plugin update.
Un saludo.
Hola que ondas?
Pues yo bajé el plugin, lo instalé y está funcionando sin problemas.
Lo que no pude hacer funcionar es el pesado de código que aqui pones nose si sea porque no entiendo si van los dos o solamente uno de los dos.
De igual forma intenté poner los dos y también por separado y me devuelve un error en la línea 112 que es dice lo siguiente:
Parse error: syntax error, unexpected T_STRING in /wp-content/plugins/recommendit.php on line 112
Y la línea 12 dice:
$recs = $wpdb->get_results( ‘SELECT p.ID,p.post_title,p.post_content,r.rec FROM ‘.$table_prefix.‘recit AS r, ‘.$table_prefix.‘posts AS p WHERE p.ID = r.id_post AND p.post_password = “” AND p.post_date
Hola, Sabo. Sólo tienes que copiar uno de los códigos. El primero es el código original y el segundo es el que incorpora un cuadro con los votos de cada post. Debes pegar ese código entre las etiquetas php del plugin (inmediatamente después de la función ‘get_recommend’, por ejemplo).
Lo que sí puede ocurrir es que al cortar y copiar algunos caracteres como las comillas se vean perjudicados, así que asegúrate de que la copia y lo que ves aquí sean exactamente iguales. Si no, en cualquier caso te puedes bajar cualquiera de losdos plugins que ya traen incorporada la función.
Un saludo.
Gracias, ya lo arreglé.
Copiar el código desde esta página hace que se vayan unos caracteres como no deben de ir.
1. Los acentos
2. rel=”nofollow” (simplemente lo quité porque estaba ocasionando error)
Y listo, si les interesa diganme para pasarles el .txt ya arreglado.
Muchas gracias man, aqui les va la sección como quedó:
http://www.malditoweekend.com/te-las-recomiendo
Ocupa arreglar unos detalles visuales, pero ya funciona
Magnífica adaptación del Plugin, felicidades Sr. Meida!
Muy buena la mejora, felicidades.
El copy/past no parece ir muy bien por lo que me dá multiples errores.
Agradecería que pusieses el código en txt o en un tar.gz o un zip para poder evitar errores.
Muchas gracias y un saludo a todos.
#Sabo: genial. Se ve muy bien y muy bien integrado en ltheme. Felicidades.
#Juanjo: ok, mañana intentaré ponerlo en zip.
Un saludo.
Manuel, hola y gracias por el comentario,
Oye comentaba en humorgráficojr que ojalá podamos descubrir entre todos como poner solo un extracto de la nota, ya que pienso que va haber problemas con Google (para aquellos que les importe) por aquello del contenido duplicado.
Tengan cuidado con eso, haber si alguien nos ilumina para poder poner solo un extracto de la nota original en lugar de que salga toda la nota completa.
Saludos!
Sí, Sabo, llevo buscando una solución desde que lancé el código, pero aún no he dado con ella. A ver si alguien nos ilumina.
Un saludo.
/**
* Generates the post excerpt if it does not caontain one already
* //copied from wordpress core
*
* @param object $post The post object
* @return string The post excerpt
*/
function generateExcerpt($post) {
$text = $post->post_excerpt;
if ( '' == $text ) {//No excerpt available so we need to fake it
$text = $post->post_content;
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = 55;
$words = explode(' ', $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, '[...]');
$text = implode(' ', $words);
}
}
return $text;
}
Se podrá hacer algo con este pedazo de código para poder generar los Excerpt de los posts?
Lo he intentado, pero sin éxito, Sabo. A ver si alguien da con la receta.
Un saludo.
Chicos, creo que he dado con el tema del “excerpt”
En las primeras líneas de la funcion “get_portada”, en la consulta de la base de datos tenemos esto
$recs = $wpdb->get_results( 'SELECT p.ID,p.post_title,p.post_content,r.rec FROM...Añadimos p.post_excerpt, el campo de la tabla que recoje el extracto del post
$recs = $wpdb->get_results( 'SELECT p.ID,p.post_title,p.post_content,p.post_excerpt,r.rec FROM...Ahora ya solo nos queda, unas líneas más abajo donde aparece
echo ''.$post_content.'';Poner esto otro:
echo ''.$post->post_excerpt.'';Obviamente hay que afinarlo un poco para que quede fino. Es buena idea utilizar la función propuesta por Sabo. Estoy probando en Boulé, pero las cajas de votos flotan más que las nubes
A ver si os funciona
Bueno, se ha comido algunas cosas a la hora de insertar el post. Si no te sale te envío un correillo con el código para mayor comodidad
Daniel, el problema es que muchos no hacemos uso del excerpt a la hora de crear el post, y opr eso al llamar a esa función en la base de datos no nos aparece nada. El código que aporta Sabo viene precisamente a corregir esa cuestión, lo que hace falta saber es la forma de implementarlo correctamente en el plugin.
Un saludo.
El Sr. Manuel está en lo correcto en cuanto a que no todos hacemos uso del Excerpt al crear un post.
Ahora mi pregunta es, que pasa si ya uso el Plugin Post teaser, que crear extractos del post y los pone en la página inicial en lugar de poner el post completo, yo creo que si uso lo que propone Daniel, pero enfocado a mandar llamar lo que utiliza Post Teaser a lo mejor pueda ser una solución para mi.
Solo necesito saber que tabla crea post teaser para remplazarla por lo que propone Daniel y ver si funciona.
Gracias por los aportes, seguiré buscando otras soluciones o como implementar lo que propuse.
Efectivamente, Miguel utiliza el excerpt, pero siempre es una línea de texto, no más. Lo que vosotros que contáis es lo que pasa de forma habitual, que el excerpt (llamemoslo resumen) se genera automáticamente.
Entonces, lo que propongo es en la linea donde se publica el resumen en vez de utilizar esto
echo $post->post_excerpt;Utilizar esto:
echo generateExcerpt($post_content);Y utilizar la función de Sabo modificada
function generateExcerpt($post) {
$text = str_replace(']]>', ']]>', $post);
$text = strip_tags($text);
$excerpt_length = 55;
$words = explode(' ', $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, '[…]');
$text = implode(' ', $words);
}
return $text;
}
Así lo tenemos en Boulé. Evidentemente esto es una solución de andar en zapatillas, hay que profundizar un poco más, que Wordpress tiene funciones de sobra para hacer estas tareas..
Sabo, miraré el Plugin Post Teaser, que ese no lo tenía apuntado.
Está muy bueno el plugin:
http://dev.wp-plugins.org/wiki/PostTeaser
Se los recomiendo para aquellos que quieran poner solo una parte de la noticia en la página principal, tu puedes decirle que tantos caracteres y configurar otros detalles.
Perfecto, Daniel, ahora sí me funciona perfectamente. Se pierden las imágenes, pero se gana en claridad y facilidad de lectura para los usuarios. O al menos yo lo veo así. Además, evitamos ofrecer contenido duplicado. Muchas gracias a los dos, lo han clavado
Un saludo.
Me alegra saberlo. Quizás no sea lo más elegante (respecto al código), pero funciona. Una victoria más para este Batallón Excerpt
Yo no soy capaz de hacer funcionar la página de votos, como la que usas de “portada de lectores”
Creo una página, inserto el código que dices y no aparece nada.
¿Podría alguien explicarme como lo hago?
Gracias.
Herzeleyd, para que te funcionen los códigos en una página tienes que tener instalado algún plugin del tipo runPHP.
Un saludo.
Muchas gracias. Ya he conseguido la segunda parte, añadir el php_getoverview y hacer visible en la página los más votados. Pero ahora tengo el siguiente problema. En esa página no aparecen bien las páginas votadas, no solo porque les faltan datos de la fecha, tags y demás, sino que el código no funciona al mostrarlas. En vez de aparecer imágenes, aparece el enlace y los códigos de centrado, mayúsculas y demás. ¿Por qué ocurre eso?
http://www.herzeleyd.com/lo-votado/
Espero que puedas echarme una mano de nuevo.
Muchas gracias por todo.
Ahora tienes que jugar con los parámetros de la página, con las div, los class y el css. Tienen que ser similares a las de los archivos ‘index.php’ o ‘single.php’, ‘page.php’, etc…
Un saludo.
ufff, no tengo ni la más remota idea. Además, cada vez que he tocado el código del plugin me ha dado error fatal.
Lo único que quiero es que aparezcan las imágenes y demás en vez del código y que quede recortado, no quiero que aparezca el post entero, me gustaría que apareciera como en tu página. Una parte que se lea y la demás con el típico botón de leer el resto de la entrada. Y sobre todo, que me reconozca el código html o el que sea, para que se vea todo bien y no aparezcan los códigos a secas.
No se si es muy complicado, deberían ser dos parámetros, pero no se cuales pueden ser (no tengo ni idea de programación) y no se exactamente donde se meten.
Espero que no sea mucha molestia.
Un saludo y gracias de nuevo.
A lo que me refiero, me imagino que lo que tendré que meter en el php del plugin, serán dos “echo” de esos, con un código o algo que uno indique que la entrada se recorta y otro para que el código html o el código que sea, aparezca en imágenes y colores.
Espero estar explicándome.
Los comentarios están cerrados.
{ 11 trackbacks }