WP-PageNavi

Descripción

¿Quieres reemplazar los viejos enlaces ← Entradas anteriores | Entradas siguientes → con enlaces a las páginas?

Este plugin dispone de la etiqueta de plantilla wp_pagenavi () que genera enlaces de paginación amigables.

Gran parte de la línea 2.x fue obra de scribu, cuyos artículos sobre su uso con consultas secundarias siguen siendo los que se indican en las preguntas frecuentes de abajo. El ícono del plugin es de SimpleIcon, de Flaticon.

Donaciones

He pasado la mayoría de mi tiempo creando, actualizando, manteniendo y dando soporte a estos plugins. Si de verdad te gustan mis plugins y puedes pasarme un par de dólares lo apreciaré de verdad. Si no siéntente libre de usarlo sin obligación alguna.

Uso

En tu tema tienes que encontrar las llamadas a next_posts_link() y previous_posts_link() y reemplazarlas.

En el tema TwentyTen se ve así:

<div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts', 'twentyten' ) ); ?></div>
<div class="nav-next"><?php previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>', 'twentyten' ) ); ?></div>

Deberías reemplazar esas dos líneas con esto:

<?php wp_pagenavi(); ?>

En páginas con varias partes deberías ver el código así:

<?php wp_link_pages( ... ); ?>

y reemplazarlo con esto:

<?php wp_pagenavi( array( 'type' => 'multipart' ) ); ?>

Ve a WP-Admin -> Ajustes -> PageNavi para configurarlo.

Cambiando el CSS

Si necesitas configurar el estilo CSS de WP-PageNavi, puedes copiar el archivo css/wp-pagenavi.css del directorio del plugin de tu tema con el nombre wp-pagenavi.css y hacer allí tus modificaciones. De esta forma, no perderás tus cambios al actualizar el plugin.

La hoja de estilos no establece ninguna fuente ni color de texto, por lo que los hereda ambos de tu tema, y sus dos colores de borde son propiedades CSS personalizadas. Un cambio pequeño no necesita ninguna copia del archivo en absoluto:

.wp-pagenavi {
    --wp-pagenavi-border-color: #d0d0d0;
    --wp-pagenavi-border-color-current: rebeccapurple;
}

También puedes establecer la opción “Usar wp-pagenavi.css” en “No” en la página de ajustes, y agregar los estilos directamente al archivo style.css de tu tema.

Cambiando los nombres de las clases

Hay filtros que puedes usar para cambiar los nombres de clase por defecto que se asignan a los elementos de navegación de la página.

Filtros

  • wp_pagenavi_class_pages
  • wp_pagenavi_class_first
  • wp_pagenavi_class_previouspostslink
  • wp_pagenavi_class_extend
  • wp_pagenavi_class_smaller
  • wp_pagenavi_class_page
  • wp_pagenavi_class_current
  • wp_pagenavi_class_larger
  • wp_pagenavi_class_nextpostslink
  • wp_pagenavi_class_last

Uso de filtros

// Simple Usage - 1 callback per filter
add_filter('wp_pagenavi_class_previouspostslink', 'theme_pagination_previouspostslink_class');
add_filter('wp_pagenavi_class_nextpostslink', 'theme_pagination_nextpostslink_class');
add_filter('wp_pagenavi_class_page', 'theme_pagination_page_class');

function theme_pagination_previouspostslink_class($class_name) {
  return 'pagination__control-link pagination__control-link--previous';
}

function theme_pagination_nextpostslink_class($class_name) {
  return 'pagination__control-link pagination__control-link--next';
}

function theme_pagination_page_class($class_name) {
  return 'pagination__current-page';
}


// More Concise Usage - 1 callback for all filters
add_filter('wp_pagenavi_class_previouspostslink', 'theme_pagination_class');
add_filter('wp_pagenavi_class_nextpostslink', 'theme_pagination_class');
add_filter('wp_pagenavi_class_page', 'theme_pagination_class');

function theme_pagination_class($class_name) {
  switch($class_name) {
    case 'previouspostslink':
      $class_name = 'pagination__control-link pagination__control-link--previous';
      break;
    case 'nextpostslink':
      $class_name = 'pagination__control-link pagination__control-link--next';
      break;
    case 'page':
      $class_name = 'pagination__current'
      break;
  }
  return $class_name;
}

Capturas de pantalla

Instalación

  1. Instala y activa el plugin.
  2. En tu tema, reemplaza las llamadas a next_posts_link() y previous_posts_link() por wp_pagenavi(). El siguiente ejemplo muestra cómo queda en un tema estándar.
  3. Ve a WP-Admin -> Ajustes -> PageNavi para cambiar el texto y el número de enlaces de página.

FAQ

¡Cuando voy a la página 2 veo las mismas entradas que en la página 1!

Estás usando query_posts() mal. Echa un vistazo a Cómo usar correctamente query_posts()

¿Funciona PageNavi con instancias secundarias de WP_Query?

Sí; lee este tutorial

¿Cómo ignoro la página de opciones?

Si estás usando un plugin multilingüe probablemente prefieras ignorar estas cadenas en la página de opciones.

Lo puedes hacer así:

<?php wp_pagenavi( array( 'options' => WP_PageNavi_Options::defaults() ) ); ?>

Antes de la 3.0.0 esto se escribía como PageNavi_Core::$options->get_defaults(). Esa propiedad estaba respaldada por el framework SCB incluido, que la 3.0.0 elimina, por lo que la forma antigua ya no funciona y debes actualizarla.

¿Puedo usar una flecha SVG para los enlaces anterior y siguiente?

Sí. Los ajustes de texto de navegación aceptan los elementos SVG en línea, así como todo lo que permite wp_kses_post(), por lo que un ícono escrito en la pantalla de ajustes sobrevive al guardado. Esa lista de permitidos es el filtro wp_pagenavi_allowed_html si necesitas ampliarla o reducirla.

Reseñas

17 de Agosto de 2023
Simples e totalmente funcional. Resolvendo o problema de paginação com extrema facilidade. Parabéns aos devs.
22 de Noviembre de 2022
I am using this plugin + Divi. It works just fine, but there is a bug with the slugs of the pages and the post types. If you have, for example, a post type with the slug "speakers" and your page is also call "speakers", both slugs will be the same and this is causing the plugin to break. Most people on the internet are looking for this error as the page/2 error. Be sure the slugs does not match and it will work just fine.
17 de Agosto de 2022
A simple and excellent plugin. The display of the blog list becomes much smarter, so it is very useful. Currently, I've been using in combination with "Styles For WP Pagenavi Addon".
Leer los 149 comentarios

Colaboradores & Desarrolladores

“WP-PageNavi” es software de código abierto. Las siguientes personas han contribuido a este plugin.

Colaboradores

“WP-PageNavi” ha sido traducido en 53 idiomas. Gracias a los traductores por sus contribuciones.

Traduce “WP-PageNavi” a tu idioma.

¿Interesado en el desarrollo?

Revisa el código, echa un vistazo al repositorio SVN, o suscríbete al registro de desarrollo por RSS .

Historial de cambios

3.0.1

  • CHANGED: The settings migration now runs early on every request instead of only when wp-admin is loaded, so a site whose dashboard is never opened still picks up its settings after an update
  • FIXED: Network-activating the plugin upgraded only the site the click happened on. Every other site on the network kept serving its front end with the default settings — its real, pre-3.0.0 settings sat unread until somebody opened that site’s wp-admin, which also means nothing was lost and any site that looked wrong has already healed itself. Activation now walks every site on the network

3.0.0

  • BREAKING: WP-PageNavi now requires WordPress 6.8 and PHP 8.2. A site running anything older will not be offered the update
  • BREAKING: The settings are stored in wp_pagenavi_options instead of pagenavi_options. The old row is copied over and removed automatically
  • BREAKING: The settings screen has moved from options-general.php?page=pagenavi to options-general.php?page=wp-pagenavi
  • BREAKING: pagenavi-css.css is now css/wp-pagenavi.css, and a copy in your theme directory must be renamed to wp-pagenavi.css to keep overriding it
  • BREAKING: Every class is now prefixed. PageNavi_Options, PageNavi_Call and PageNavi_Core are WP_PageNavi_Options, WP_PageNavi_Call and WP_PageNavi_Core, and PageNavi_Admin is now WP_PageNavi_Settings
  • BREAKING: PageNavi_Core::$options has been removed. Use WP_PageNavi_Options::defaults() and WP_PageNavi_Options::get() instead. See the FAQ
  • BREAKING: PageNavi_Options_Page has been removed and replaced by WP_PageNavi_Settings
  • BREAKING: Dropping the SCB Framework also removes the global functions and scb* classes it defined, since they were loaded into WordPress by whichever plugin bundled it. If your theme or another plugin called html(), html_link(), set_post_field(), scb_init(), scb_register_table(), scb_install_table(), scb_uninstall_table(), scb_admin_notice(), scb_get_query_flags(), scb_list_fold() or scb_list_group_by(), it must now provide them itself. Note that another installed plugin may still be supplying them, so the breakage will only appear once nothing else on the site bundles SCB
  • NEW: Removed the bundled WP SCB Framework. The plugin now runs entirely on WordPress core APIs and has no dependencies
  • NEW: The settings page is built with the WordPress Settings API
  • NEW: Restructured into includes/ following the Plugin Handbook layout
  • NEW: A wp_pagenavi_capability filter over the capability the settings screen requires
  • NEW: A wp_pagenavi_version row holding the plugin and schema version markers, so a future upgrade has something to compare against
  • CHANGED: The stylesheet’s two colours are CSS custom properties with fallbacks rather than hardcoded hexes, and it now carries a dark colour scheme
  • CHANGED: The stylesheet uses no physical CSS properties, so one file serves left-to-right and right-to-left sites alike
  • FIXED: An inline SVG arrow no longer deletes the entire previous/next link. wp_kses_post() removes an SVG rather than cleaning it, which left the link text empty, and a link with empty text is dropped altogether. The navigation text is now filtered against wp_kses_post()‘s list plus the inline SVG elements, exposed as the wp_pagenavi_allowed_html filter. Reported by Cal at toolshed (#73)
  • FIXED: Multisite uninstall no longer stops at the hundredth site, so a large network has its options removed everywhere. Reported by Cal at toolshed (#73)
  • FIXED: The navigation aria-labels now match the strings WordPress core defines, so they are translated in every locale core supports. Reported by Cal at toolshed (#73)
  • FIXED: An array submitted where a text setting belongs no longer raises a PHP 8 notice, and option keys the plugin does not define are no longer stored. Reported by Cal at toolshed (#73)
  • FIXED: Page links are escaped with esc_url() instead of esc_attr()
  • FIXED: Page numbers derived from a WP_User_Query are cast to integers, so the current page is marked correctly
  • FIXED: The stylesheet version now tracks the plugin version instead of being pinned to 2.70
  • FIXED: The label on each Yes/No setting pointed at an element that did not exist, so clicking it did nothing
  • NOTA: No se renombra ningún hook ni ninguna template tag. Los diez filtros wp_pagenavi_class_*, el filtro wp_pagenavi, wp_pagenavi() y wp_pagenavi_dropdown() mantienen todos los nombres con los que se lanzaron.