Paginación de WordPress Una cartilla

En este artículo / tutorial veremos los conceptos básicos de la paginación de WordPress, la configuración de paginación predeterminada y cómo se puede mejorar..


El esquema de paginación predeterminado

Usaré el tema predeterminado de WordPress Twenty Eleven como referencia. Incluso si no lo está utilizando, lo encontrará en su directorio de temas.

Publicaciones por página

No olvide que cuando se trata de la paginación, WordPress necesita saber cuántos elementos se deben enumerar en cada página. Este valor se establece en la página Admin -> Settings -> Reading settings.

WordPress utilizará el valor de "Las páginas del blog como máximo" a menos que lo anule, por ejemplo, al usar una consulta personalizada.

El código de paginación predeterminado

Un ejemplo típico de mostrar una lista de publicaciones es cuando ve todas las publicaciones en una categoría. La visualización de las publicaciones de categoría se maneja mediante el archivo de plantilla category.php. Para el tema Twenty Eleven, la página de categorías transfiere la visualización de la paginación a una función llamada twentyeleven_content_nav, que se encuentra en functions.php.

 function twentyeleven_content_nav ($ nav_id) global $ wp_query; if ($ wp_query-> max_num_pages> 1):?>   

El código anterior podría haber sido incluido directamente en category.php, pero los diseñadores de Twenty Eleven decidieron convertirlo en una función para que pueda ser llamado desde muchos archivos de plantillas. La mayoría del código es para propósitos de diseño e internacionalización, pero esto es lo que hace:

  • utilizando el valor de la variable de consulta global $ wp_query-> max_num_pages, verificamos si tenemos más de una página; esto evita mostrar todo el bloque de paginación si solo hay una página de publicaciones
  • La función de WordPress next_posts_link muestra un enlace a la siguiente página de publicaciones y toma un argumento opcional para el texto del enlace personalizado.
  • De manera similar, la función de WordPress previous_posts_link muestra un enlace a la página anterior de publicaciones

Y esto es lo que se verá con una configuración de dos publicaciones por página..

Es bastante básico pero es funcional. El problema con esta pantalla es que no hay forma de saber en qué página está o cuántas páginas hay en total..

Una cosa para recordar acerca de las listas de publicaciones predeterminadas de WordPress es que se ejecutan en orden inverso:

Debido a que las consultas de publicaciones generalmente se ordenan en orden cronológico inverso, next_posts_link () generalmente apunta a entradas más antiguas (hacia el final del conjunto) y prev_posts_link () generalmente apunta a entradas más nuevas (hacia el principio del conjunto).

Ese comportamiento puede alterarse si está creando una consulta personalizada. Tenga en cuenta que en el ejemplo anterior, se utilizaron dos bloques de paginación: uno antes del inicio del bucle de correos y otro después. Siempre es un buen toque tener paginación en la parte superior e inferior para que el usuario no tenga que desplazarse demasiado.

Ejemplos:

Para mostrar "Ir a la página siguiente ..." mientras vincula el texto:

 next_posts_link ('Ir a la página siguiente ...');

Para mostrar una imagen en lugar de texto:

 $ previous_posts_image = ''; previous_posts_link ($ previous_posts_image);

Alternativa

Existe una alternativa al uso de las funciones separadas next_posts_link y previous_posts_link, y esa es la función posts_nav_link. Básicamente, esta función genera tanto el enlace anterior como el siguiente de una sola vez, con texto de enlace opcional y argumentos de separador de enlace..

La salida por defecto:

 posts_nav_link ();

Y con texto de enlace personalizado y un separador:

 posts_nav_link (':::', '<< Newer Posts', 'Older Posts >> ');

Le sugiero usar las funciones next_posts_link y previous_posts_link, ya que le brindan más control sobre la ubicación de sus enlaces, así como hacer que su código sea más comprensible..


Mensajes individuales de paginación

Cuando se muestran publicaciones individuales, es bueno mostrar un enlace a las publicaciones anteriores y siguientes en la secuencia. El archivo de plantilla single.php maneja eso con el siguiente código:

 

Eso te dará esto:

Son las funciones next_post_link y previous_post_link las que producen los enlaces de paginación en la parte superior derecha. Estas funciones aceptan un par de parámetros que nos permiten personalizar su salida bastante bien. Los parámetros son:

next_post_link (formato, enlace, in_same_cat, excluded_categories);

Los parámetros de formato y enlace trabajan juntos. El formato es la forma en que desea que aparezca el enlace:% enlace en el formato se utiliza como marcador de posición para el contenido del parámetro del enlace, que es el texto real que queremos usar para el enlace. Así que esto:

 previous_post_link ('% link', '<< Next Newest Post' ); next_post_link( '%link', 'Next Oldest Post >> ');

Nos daría esto:

Si quisiéramos mostrar el título real de la publicación siguiente o anterior, usaríamos el valor especial% título en el parámetro de enlace. Así que esto:

 previous_post_link ('% link', '<< Previous Post: %title' ); next_post_link( '%link', 'Next Post: %title >> ');

Nos daría esto:

Los parámetros restantes le permiten asegurarse de que la próxima publicación vinculada esté en la misma categoría y excluir ciertas categorías. Consulte la documentación como se vincula arriba..

Podrías mostrar una imagen para el enlace como:

 $ previous_post_link_image = ''; previous_post_link ('% link', $ previous_post_link_image);

Una mejor solucion

Tan fácil como son los métodos anteriores, también son limitados. Afortunadamente, WordPress nos da la función paginate_links. Esto nos permite crear un verdadero conjunto de enlaces de paginación, como este:

A continuación se muestra el código que da salida a la paginación anterior. Echemos un vistazo a lo que hace..

 global $ wp_query; $ total_pages = $ wp_query-> max_num_pages; if ($ total_pages> 1) $ current_page = max (1, get_query_var ('paginado')); echo paginate_links (array ('base' => get_pagenum_link (1). '% _%', 'format' => '/ page /% #%', 'current' => $ current_page, 'total' => $ total_pages ,)); 
  • globalice el objeto wp_query para que podamos recuperar el valor max_num_pages: este es el número total de páginas devueltas por la consulta
  • encuentre la página actual recuperando la variable 'paginada' con get_query_var: usamos la función max para hacer que la página actual se establezca por defecto en 1
  • La función paginate_links toma una serie de parámetros: se muestran los cuatro más importantes
  • recupere la URL base para la página con la función get_pagenum_link y agregue el patrón% _% que se reemplazará por el parámetro de formato, a continuación
  • en nuestro caso, especifique un patrón de formato que se ajuste a la forma en que aparecen los enlaces permanentes bonitos (establecidos con% postname% en Admin -> Configuración -> Enlaces permanentes): el% _% en el parámetro base será reemplazado por este
  • configura las páginas actuales y totales como se recuperó previamente

La URL de los resultados paginados que usan bonitos enlaces permanentes tendrá un aspecto similar al siguiente:

http://2011.rosselliot.co.nz/category/honda/page/2/

La llamada get_pagenum_link (1) recuperará esta parte de la URL:

http://2011.rosselliot.co.nz/category/honda/

Luego proporcionamos un parámetro de formato para el resto de la URL que es:

página 2

La parte% #% del formato contiene nuestro número de página actual

Basado en este conjunto de parámetros, paginate_links producirá un conjunto de enlaces de paginación. Puede insertar el código directamente en un archivo de plantilla que maneja la paginación (como category.php) o guardarlo como una función en sus funciones.php y luego llamarlo desde cualquier plantilla que desee.

paginate_links tiene otros parámetros que le permiten adaptar la salida, cómo aparecen los números y lo que dicen las etiquetas. Consulte la documentación. Con un poco de estilo es fácil crear una impresionante pantalla de paginación. Con este código modificado y estilo añadido:

 global $ wp_query; $ total_pages = $ wp_query-> max_num_pages; if ($ total_pages> 1) $ current_page = max (1, get_query_var ('paginado')); eco '
'; echo paginate_links (array ('base' => get_pagenum_link (1). '% _%', 'format' => '/ page /% #%', 'current' => $ current_page, 'total' => $ total_pages , 'prev_text' => 'Prev', 'next_text' => 'Next')); eco '
';
 .page_nav. page-numbers relleno: 4px 8px; margen: 0px 4px; borde: 1px gris sólido; color: # FFB134;  .page_nav .current border: 1px solid # FFB134; color de fondo: #FBEFDB;  .page_nav .prev, .page_nav .next border: none; color azul; 

Fue fácil producir esto:

Espero que hayas disfrutado de esta cartilla en la paginación. ¿Tienes más consejos sobre la paginación con WordPress? Háganos saber en los comentarios a continuación..