Taxonomías y paginación

Imaginemos un blog de música en el que se pasa revista a las últimas novedades. Aparte de la crítica, deberá ofrecer información básica como el nombre del autor o grupo, estilo musical, etc. La forma más sencilla de ofrecer estos datos no es otra que las taxonomías. Por lo tanto, lo primero será ponerlas en marcha: Taxonomías avanzadas en WordPress 3.1.

El segundo paso sería añadir una nueva página donde se mostrara un listado de todos los autores o grupos musicales, otra con los estilos musicales, etc. Para ello usaríamos la función get_terms. Así lo hacemos y vamos escribiendo entradas hasta que nos encontramos con que, por ejemplo, el número de los primeros supera los mil. Por tanto, decidimos dividir el listado en varias páginas.

¡Ojo! NO estamos hablando del campo "author" que identifica a quien publica una entrada sino de los autores que han compuesto la música.

El tercer paso es preparar una plantilla (podemos usar como base el archivo page.php). En nuestro caso podemos eliminar todo excepto las divisiones principales (dependerá de cada tema) y las llamadas al header, sidebar y footer. El archivo resultante, en lugar de page_personalizada.php, lo llamaremos listado-autores.php y en el encabezamiento pondremos:

<?php
/*
Template Name: Listado autores
*/
?>

Todo el código que se muestra a continuación debe insertarse en el archivo listado-autores.php.

Cuarto paso: construir el array y lo necesario para paginar:

<?php
$page = ( get_query_var('paged') ) ? get_query_var( 'paged' ) : 1;
$per_page = 300;
$offset = ( $page-1 ) * $per_page;
$args = array(
'orderby' => 'slug',
'number' => $per_page,
'offset' => $offset,
'paged' => $paged
);
?>

La variable $per_page determina el número de autores a mostrar en cada página y $orderby el orden en el que se mostrarán. Recomiendo usar slug para evitar errores con ciertos caracteres. El resto de las líneas no deben modificarse.

Quinta parte: llamar a la función get_terms  y ejecutar un bucle. Nota: Para no alargar el comentario en demasía, omito la parte que permite mostrar el listado en tres columnas e indico solo la forma para una lista sin ordenar. Si alguien está interesado en el código completo, que me lo pida.

Nota: autor es el nombre de la taxonomía. Debéis cambiarlo por el que corresponda.

<?php
    $terms = get_terms("autor", $args);
    echo '<ul>';
    foreach ($terms as $term) {
        echo '<li><a href="'. get_term_link($term->slug, 'autor') . '" title="' . $term->count . ' artículos">'. $term->name.'</a></li>' . "\n";
    }
    echo '</ul>';
?>

Sexta parte: el código necesario para mostrar las páginas.

<?php
$total_terms = wp_count_terms('autor');
$pages = ceil($total_terms/$per_page);
if( $pages > 0 ):
	echo '<div class="paginterna">';
    for ($pagecount=1; $pagecount <= $pages; $pagecount++):
		if ($paged == $pagecount) :
			$ruta = '<span class="maspaginas">Pág.' . $pagecount . '</span>';
			else:
			if ($pagecount == 1 and $paged <=1):
				$ruta = '<span class="maspaginas">Pág.' . $pagecount . '</span>';
				else:
				$ruta = '<span class="maspaginas"><a href="'.get_permalink().'page/'.$pagecount.'/">Pág. '.$pagecount.'</a></span>';
			endif;
		endif;
		echo $ruta;
	endfor;
	echo '</div>';
endif;
?>

Como podéis comprobar, hemos usado dos estilos: paginterna y maspaginas. Lo mismo de antes; si alguien está interesado que me lo diga.

Finalmente creamos una nueva página y en el apartado "Plantilla" (sección "Atributos de página") seleccionamos "Listado autores" (ver el tercer paso).

Y el resultado lo podéis ver el la Revista de Prensa: Archivo por autores.

14 comentarios


  1. Hola.

    Yo estoy intentando conseguir que para una custom taxonomy haya paginación, pero no lo consigo.
    Tengo el archivo taxonomy-bicis.php que tendría que añadir en este archivo para que haya paginación.

    Muchas gracias.
    Un saludo.

    Responder

    1. En principio no tendrías que añadir nada. Si el archivo taxonomy-bicis.php está basado en uno de los archivos de tu tema (archive, category o incluso en el index), la paginación es automática y su valor será el que hayas establecido en Ajustes > Lectura.

      Si quieres, pega el código de ese archivo en http://tinypaste.com/ y luego me pasas el enlace para echarle un vistazo.

      Responder

      1. Ante todo gracias por la contestación.

        Bicicletas es un custom post type y tipo es la taxonomía, perdón por el fallo al explicarme, así que lo que tengo es el archivo taxonomy-tipo.php
        El código: http://tinypaste.com/89163cf9

        Lo que quiero conseguir es paginación al escribir dominio.com/bicicletas/tipo1 se listen el número de bicicletas del tipo 1 que indique y así con más tipos.

        ¿Dónde está Ajustes > Lectura?

        Responder

  2. No se si lo que quiero se podrá hacer con lo que has explicado.

    Yo quisiera que los usuarios registrados de mi blog, lo estoy haciendo, pudieran poner en él, los eventos que van a desarrollar, indicando la dirección web del mismo y los datos que se le pidieran en un formulario.

    Estos eventos deberían salir en una pagina del blog como una lista numerada.

    Cada usuario debería recibir el aviso de que hay un evento nuevo.

    Gracias a ti y a cuantos "pierden" su tiempo enseñando a los demás.

    Un saludo.

    Antonio

    Responder

  3. Hola

    He seguido tus indicaciones y me lista los autores perfectamente. El problema es que me da error 404, página no encontrada al paginar, es decir, no hace el paginado correctamente. He actualizo los permanent links y así y todo sigue saliendo el problema.

    Tenéis idea de la causa

    Muchas gracias

    Responder

  4. Lo solucione, el problema era cambiar esta regla en la taxonomía:

    'rewrite' => true,

    por

    'rewrite' => false,

    Responder

  5. Hola nuevamente, he detectado otro problema y es que ahora pagina perfectamente pero la url del autor no la pone amigable sino así: http://site.com/?autores=nombre-apellidos

    y eso es debido al cambio de true por false. como se puede ajustar ambas cosas. veo que en tu sitio funciona a la perfección

    muchas gracias de nuevo

    Responder

    1. Deja el rewrite como true y después cambia los enlaces permanentes a "predeterminado". Comprueba si todo va bien. Si la respuesta es afirmativa, cambia los enlaces a otra opción y vuelve a comprobar. Ya me dirás.

      Otra opción es la siguiente. Prueba a sustituir
      'rewrite' => true
      por
      'rewrite' => array( 'slug' => 'autores' )

      Responder

  6. Sigue sin funcionar , si uso
    'rewrite' => array( 'slug' => 'autores' )

    entonces no hace el paginado

    Muchas gracias

    Responder

  7. Hola! Habia intentado hacerlo con los post personalizados y taxonomias, en el que creo una entrada elijo la taxonomia

    por ejemplo:

    Noticias > (Post personalizados)
    1.Cultura > (taxonomias)
    2.Tecnologia > (taxonomias)
    3.Entretencion > (taxonomias)

    pero al crear un post el enlace permanente queda asi
    wwww.miweb.com/noticias/nombre-de-la-entrada

    y el resultado deberia ser asi
    wwww.miweb.com/noticias/cultura/nombre-de-la-entrada

    la idea es que la taxonomia tambien se integre al permanent link (no se si funcionan asi las taxonomias?)

    Saludos!

    Responder

    1. Lo que necesitas es cambiar la estructura de los enlaces permanentes, y siento decirte que no tengo ni idea de cómo se podría hacer. He buscado a ver si había algo en los foros y la soluciones que he encontrado son complejas. Creo, no obstante, que el plugin Custom Post Type Permalinks podría servirte.

      Responder

  8. Solo quiero comentar para agradecer el codigo, me he pasado mas de 5 dias buscando una solucion y por fin la pude hallar, muchisimas gracias, funciona perfecto para mi.
    Saludos desde Argentina

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *