historias para no dormir…
Hace pocos días he añadido un miniblog un tanto peculiar que yo mismo me he programado. Para ello he tenido que revisar el Wiki de desarrollo de Wordpress. Las características de este miniblog son:
Lo primero que he hecho ha sido redefinir el CSS para que incorpore una nueva sección flotante y que aloje dentro ítems cuadrados de un determinado tamaño. Pero bueno, esto es lo de menos, lo que me interesa explicar es el bucle de Wordpress.
El bucle de Wordpress no es más que el recorrido que se hace sobre los posts existentes para seleccionar aquellos que cumplan un determinado criterio y mostrarlos en nuestro blog. Por defecto, en la página principal por ejemplo, éste bucle recorrerá los posts y seleccionará los 10 últimos escritos y los mostrará en orden descendiente a la fecha de creación. El código es el siguiente:
< ?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
< ?php mostrar_post(); ?>
< ?php endwhile; else: ?>< ?php _e('Sorry, no posts matched your criteria.'); ?>
< ?php endif; ?>
Donde la función mostrar_post(); es la que se encarga de mostrar el título, la fecha de creación, la categoría y el contenido de los posts.
Vamos a modificar el bucle para que, si le llega un post de la categoría Miniblog, éste se muestre con un estilo diferente que el resto de posts:
< ?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
< ?php if (in_category('22') ) { ?>
< ?php mostrar_post_miniblog(); ?>
< ?php } else { ?>
< ?php mostrar_post(); ?>
< ?php } ?>
< ?php endwhile; else: ?>< ?php _e('Sorry, no posts matched your criteria.'); ?>
< ?php endif; ?>
Notar que la categoría 22 es nuestra categoría Miniblog. Como véis esto tiene un pequeño problema, y es que intercala los posts del Miniblog en los posts normales, y esto no queda muy bien, pues nosotros los queremos arriba del todo, y encima, sólo queremos que muestre 3, porque no caben más si no queremos que ocupen más de una línea. La solución es hacer dos bucles, uno que muestre sólo los posts de la categoría 22 y otro que muestre todos menos el 22. Además, vamos a indicar en el primer bucle que sólo se seleccionen 3.
La solución pasa por una función de la API: query_posts(args);, que aún no tiene documentación, por lo que tendremos que buscarnos la vida en los enlaces que indican. En concreto yo he usado la función así, colocando la llamada antes del primer bucle:
< ?php query_posts('category_name=Miniblog&showposts=3'); ?>
El problema de usar esta función es que, a la hora de realizar el segundo bucle, habrá que resetear el objeto Query para que vuelva al inicio de los posts. Esto se puede conseguir, por ejemplo con otra llamada a la misma función, pidiendo que nos ordene los posts por fecha:
< ?php query_posts('orderby=date'); ?>
Con esto ya tendremos los dos bucles mostrando, el primero sólo 3 posts de la categoría Miniblog, y el segundo, manteniendo la condición de que no sean posts de la categoría 22, mostrando todos los posts ordenados por fecha.
Finalmente, un pequeño detalle es añadir una pequeña comprobación de que sólo muestre los posts del Miniblog si nos encontramos en la página principal. Esto se consigue llamando a la función is_home();.
El código final de los dos bucles quedará así:
< ?php if (is_home()): ?>
< ?php query_posts('category_name=Miniblog&showposts=3'); ?>
< ?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
< ?php mostrar_post_miniblog(); ?>
< ?php endwhile; else: ?>< ?php _e('Sorry, no posts matched your criteria.'); ?>
< ?php endif; ?>
< ?php endif; ?>< ?php query_posts('orderby=date'); ?>
< ?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
< ?php if ( !(in_category('22')) ) { ?>
< ?php mostrar_post(); ?>
< ?php } ?>
< ?php endwhile; else: ?>< ?php _e('Sorry, no posts matched your criteria.'); ?>
< ?php endif; ?>
No es un gran código, pero funciona bastante bien. Espero que os sirva.
Blog personal de Fernando Blat, sobre tecnologías web, y programación, ¿o era al revés?
Me ha gustado la idea. No ya cómo hacerla -no uso WordPress, hice mi propio blog en PHP-, si no lo de utilizar los cuadros.
Estoy haciendo ahora mi CeroBits v2.0 y tenía pensado agregar un sistema de miniposts. Creo que lo reduciría a algo como los de, por ejemplo, Chavalina. Así, que, si me das permiso, te plagiaré la idea ;)
Por supuesto, la idea de comentarlo en el artículo era para que si alguien se animara entendiera cómo es el mecanismo.
Aunque esté en formato Wordpress la idea se entiende perfectamente.
También puede servir de ejemplo cómo hacer un blog utilizando Bitacorae, que podemos encontrar en la documentación.
Un saludo!
vljhkogujuytfy