Limitar el número de post en WordPress sin plugin
Código para limitar el número de post que se muestran en la home, categorías y archivos de un blog de WordPress sin usar plugins.
Estoy desarrollando un theme de WordPress para un proyecto que tengo y quería limitar el número de post que se muestran por defecto en la home (index.php), en las categorías (category.php) y en los archivos de entradas (archive.php). La idea es mostrar diferentes post para el index, las categorías y las páginas de archivo.
Como algunos sabréis se puede determinar el número de post que se muestran a nivel global desde el panel de control de WordPress, entrando en Opciones > Lectura.
El problema de esto es que WordPress no te permite establecer de forma diferenciada cuántos post se muestran en la home, en las categorías, etc. lo cual le resta flexibilidad al diseño que estés desarrollando.
Para paliar este problema hay algunos plugins, como different post per page. Pero particularmente cada día más estoy intentando prescindir de plugins a cambio de hacer ciertas cosas manualmente, entre ellas limitar los post por categorías, por aquello de no saturar de plugins innnecesarios lo que se puede hacer de forma más simple.
Limitar el número de post en WordPress sin plugin
Para ello, he revisado algunos códigos que hay disponibles en la red y la mayoría no me han funcionado. Finalmente encontré un artículo en inglés (Two Ways to Limit the Number of Posts without a Plugin) que me dio la solución, además que es un código limpio y ligero, lo que le da una clara ventaja con respecto a usar plugins para estas cosas (tendré que implementarlo en el rediseño de lawebera.es que estoy desarrollando).
Lo que he hecho es sustituir este código:
<?php while (have_posts()) : the_post(); ?>
Por este otro:
<?php $i = 1; while (have_posts() && $i < 6) : the_post(); ?>
Donde < 6, puede modificarse para mostrar el número de entradas que se desee, en este caso mostramos 5.
También hay que modificar el endwhile correspondiente:
<?php endwhile; ?>
Por este otro:
<?php $i++; endwhile; ?>
En resúmen, tu código debe quedar algo parecido a esto:
<?php $i = 1; while (have_posts() && $i < 6) : the_post(); ?> <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> <p>?php the_time(); ?></p> <?php the_content(); ?> <p><?php the_tags(); ?></p> <?php $i++; endwhile; ?> <p><?php next_posts_link(); ?></p> <p><?php previous_posts_link(); ?></p> <?php else : ?> <h1>Not Found</h1> <p>Silly monkey.</p> <?php endif; ?>
Este código se puede introducir en cualquier página que liste varios post a la vez, como index.php, category.php (y las plantillas personalizadas que tengas) o archive.php.
14 respuestas
excelente aporte, horas buscando el como cambiar la cantidad de entradas
solo hay que copiar y reemplazar el codigo que compartes, eres un master
Excelente, me ha servido muy bien!! Muchas gracias!
Hola, esta genial el código y funciona de maravillas, el problema es que utiliza la misma función para listar resultados de categorías y etiquetas. Saludos
Me pasaba lo mismo, ningún plugin me funcionaba, por más estrellas que tuviera etc… Quería evitar meter mano a php, pero esta solución es muy sencilla y me ha funcionado a la primera.
Por otro lado, no entiendo cómo Wordpress no tiene una gestión mejor para algo tan fundamental.
En cualquier caso, muchas gracias!
Muchas gracias por el código
Funciona de mil maravillas
Fácil y limpio, y muy personalizable
Muy bueno. intuitivo y útil.
Vale, funciona, pero no sólo para página principal… al menos en el theme Pinboard.
Trastoca todos los loops, tendré que buscar otra solución :(
Funciona Perfecto. Muchas gracias por el post.
Funciona Perfecto!!
Muchas gracias Sr.!
Gracias man!! me sirvió perfecto! es justo lo que buscaba y qué simple que era!
A nuestro parecer, cuando un CMS no contiene las suficientes opciones necesarias para un determinado Proyecto Web, también existe la posibilidad de desarrollar un CMS propio, bien sea de forma particular o en equipo. Esto hace mucho más flexible las posibilidades de cambios e introducción de nuevos contenidos y/o opciones para el usuario; junto con un Diseño mucho más personalizado y atractivo a la medida necesaria para el Proyecto Web.
No estoy de acuerdo con Proyectos Web. WordPress es software libre con una gigantesca comunidad de desarrolladores detrás, créeme que se puede hacer de todo con él, desde blogs simples hasta tiendas online y portales corporativos complejos. No es que hagas un CMS en grupo, no, es que hay cientos y miles de personas revisando su código cada día en busca de mejorarlo y añadirle nuevas funciones. Para mí no hay mejor garantía que esa.
Al igual que se puede desarrollar un CMS totalmente a medida, se pueden desarrollar plugins o módulos para WordPress que complementen aquello que necesitas y no tenga (más bien no encuentras, porque tener tiene de todo).
Yo soy partidario del software libre, si el desarrollador conoce el CMS con el que trabaja al cliente le sale mucho más económico usar un CMS tipo WordPress o Magento, y los tiempos de desarrollo son menores. Si conoces el CMS, puedes hacer maravillas con él.
El coste de desarrollar una aplicación a medida y desde cero para la mayoría de clientes es simplemente imposible de asumir. Puede triplicar el mismo proyecto hecho con un CMS prefabricado como WordPress.
En cuanto al diseño más personalizado con CMS a medida, mentira. WordPress te permite hacer lo que quieras con el diseño, por algo tiene las plantillas y separa estructura (html y css) de código php. Quien dice que es menos flexible no conoce la aplicación.
Y la publicación de contenidos es terriblemente fácil, tener en cuenta que se trata de un CMS que inicialmente se pensó para publicación de blogs, su centro es el contenido y facilitan su generación al máximo.
¿ya estás trabajando en el rediseño de la webera? No paras quieta, eh?
jejeje no paro Angel, no sabes bien. Entre proyectos de clientes y los míos propios agosto se presenta como un septiembre más xDD pero que no falten las ganas de mejorar y el trabajo… aunque el rediseño tardará un tiempo, estoy en ello que ya toca.