Cómo pasar argumentos personalizados en paginate_links en WordPress

2 jul 2011, 20:46:45
Vistas: 16.7K
Votos: 3

Por ejemplo, tengo domain.com/about?project=1 pero tengo los permalinks activados y estoy usando esto para generar la paginación paginate_links. El problema es que los enlaces generados son así domain.com/about?project=1/page/1 y esto rompe todo porque el proyecto se toma como 1/page/1.

¿Hay alguna forma de obtener domain.com/about/project/1/page/1 en los enlaces de paginación? Estoy enviando esto desde un formulario usando GET para mostrar el proyecto.

0
Todas las respuestas a la pregunta 1
5

Para agregar argumentos a los enlaces en la paginación de posts, utiliza el argumento 'add_args' en la función. Debes pasar los argumentos como un array asociativo. Por ejemplo, para agregar project=1 al final de todos tus enlaces, harías esto:

global $wp_query;
paginate_links(array(
  'total' => $wp_query->max_num_pages,
  'current' => (get_query_var('paged') ? get_query_var('paged') : 1),
  'base' => 'http://domain.com/about/%_%',
  'format' => 'page/%#%',
  'add_args' => array( 'project' => 1 /* o cualquiera que sea el número del proyecto */ ),
));

¡Espero que te haya ayudado!

EDITADO

Para obtener domain.com/about/projects/1/page/1, puedes agregar una estructura de enlaces personalizada. Voy a asumir que about es una página.

function wpse21802_init(){
  add_rewrite_rule( '([^/]+)/projects/([^/])/?$', 'index.php?pagename=$matches[1]&project=$matches[2]', 'top' );
  add_rewrite_rule( '([^/]+)/projects/([^/])/page/(/d+)/?$', 'index.php?pagename=$matches[1]&project=$matches[2]&paged=$matches[3]', 'top' );
}
add_action( 'init', 'wpse21802_init' );

Después de agregar ese código, actualiza las reglas de reescritura yendo a Ajustes -> Enlaces permanentes.

2 jul 2011 22:05:24
Comentarios

Pero eso genera http://domain.com/about/page/1?project=1

Sein Oxygen Sein Oxygen
2 jul 2011 23:38:50

"Estoy enviando eso desde un formulario usando get para mostrar el proyecto." Project es una variable $_GET en ese enlace, ¿no? 'add_args' => array( 'project' => absint($_GET['project'])

John P Bloch John P Bloch
3 jul 2011 00:18:04

Sí, pero de nuevo lee la pregunta principal: ¿Hay alguna forma de obtener domain.com/about/project/1/page/1 en los enlaces de paginación? Estoy enviando eso desde un formulario usando get para mostrar el proyecto.

Sein Oxygen Sein Oxygen
3 jul 2011 05:29:52

Actualicé mi respuesta, pero también me gustaría señalar que WordPress ya admite esa estructura de URL simplemente usando la jerarquía de páginas.

John P Bloch John P Bloch
3 jul 2011 15:43:57

O 'add_args' => array( '#mydiv') si quieres que el clic en el enlace desplace hasta un div, por ejemplo.

Tim Hallman Tim Hallman
6 feb 2020 23:28:13