Quiero mostrar una página de archivo con paginación que enumera todas las categorías en mi sitio, y cada enlace va a esa página de archivo de categoría en particular. Entonces esto sería como una página de archivo de archivos de categoría.
Cada categoría en mi sitio tiene una miniatura personalizada creada manualmente para que coincida con el enlace permanente de la categoría. Ya tengo una configuración de diseño para mostrar todas las categorías, pero lo estoy haciendo con una plantilla de página personalizada, por lo que no hay paginación. Esto significa que todas las categorías se muestran en una sola página, lo cual es un poco molesto (tengo más de 100 categorías).
Mi archivo actual está configurado con un nombre de plantilla de página personalizado específico, page-catlist.php
pero estoy dispuesto a cambiarlo a cualquier otro tipo de archivo de plantilla.
Aquí está el código actual que estoy usando para generar todas las categorías en una página:
$args = array(
'orderby' => 'name',
'order' => 'ASC'
);
$cats = get_categories( $args );
$thm_pre = 'http://example.com/images/thumbs/';
$thm_end = '.png';
foreach($cats as $cat) {
$thumbnail = $thm_pre.$cat->slug.$thm_end;
// output the loop HTML here
// basically a list of category names & thumbs
// all linked to the cat URL by get_category_link()
}
Espero que haya una mejor manera de hacer esto para poder agregar paginación natural, idealmente con WP-PageNavi. Cualquier ayuda sería muy apreciada!
fuente
Respuestas:
Paginar una lista de términos / categorías / etiquetas es bastante fácil, y para lograrlo, necesita información mínima.
Veamos que necesitamos
la cantidad de términos
la cantidad de términos por página
get_terms()
( Solo tenga en cuenta que el uso deget_terms()
han cambiado en la versión 4.5 ). También puede usarget_categories()
si lo desea,get_categories()
es solo una función de envoltura paraget_terms()
Entonces, primero debemos contar la cantidad de términos. Para esto, usaremos el
count
parámetro enget_terms()
NOTA:
Todo el código no se ha probado y requiere al menos
PHP 5.4
WordPress 4.5
Puede convertir esto fácilmente para que funcione con versiones anteriores de PHP y WordPress
Ahora que conocemos la cantidad de términos, podemos establecer la cantidad de términos que necesitamos por página, digamos 10
De lo anterior, ahora podemos calcular cuántas páginas tendremos. El valor aquí se pasará a la función de paginación requerida, en su caso, a
wp_pagenavi()
En este caso, pasaría
$max_num_pages
a su función de paginaciónLa siguiente parte sería calcular nuestro desplazamiento. Solo queremos recuperar la cantidad relevante de términos por página para mantener las cosas optimizadas. No necesitamos todos los más de 100 términos por página. Consultar solo los 10 necesarios es mucho más rápido. Por lo tanto, necesitamos saber en qué página estamos, a partir de eso, calcularemos un desplazamiento. Esto se pasará a
get_terms()
, y le diráget_terms()
cuántos términos omitir desde el punto de partida inicial.Una vez que tengamos eso, también debemos decir
get_terms()
que solo devuelva 10 términos. Veamos el código de esta pieza.Solo tendrá 10 términos por página según la paginación. Ahora puede recorrer normalmente sus términos
Solo una nota, querrás asegurarte de que realmente tienes términos devueltos de tu
get_terms()
función.fuente
wp_pagnavi()
realmente funcionará en este caso?next_posts_link()
,previous_posts_link()
ypaginate_links()
. También funcionaría con cualquier función de paginación donde puede pasar un valor entero a la función, como mi función de paginación aquí . En cuanto awp_pagenavi()
eso, no puedo decir sí o no, ya que realmente no tengo idea de cómo funciona esa función, tendrá que probarla. En mi código anterior,$max_num_pages
contiene la cantidad de páginas, es un valor entero, es esta variable la que debes pasar a las funciones para calcular la paginaciónNo estoy familiarizado con WP-PageNavi, pero sospecho que se supone que se trata de publicaciones, por lo que podría arruinarse fácilmente si lo usa en un bucle como el suyo. Quizás el CSS aún podría ser útil para diseñar su html. De todos modos, configurar tu propia paginación no es tan difícil.
Primero, necesita saber cuántas categorías hay:
A continuación, debe determinar cuántos elementos por página desea:
Esto le dará la cantidad de páginas:
La tercera información que necesita es la página en la que se encuentra. Puede realizar un seguimiento de esto introduciendo una
query_var
Su URL luego se verá así:www.example.com/yourcatpage?catpage=2
Antes de comenzar el ciclo, debe saber qué página se llama:
A partir de esto, puede llamar al primer elemento que desea mostrar:
y el último:
La última página puede contener menos de
$cats_per_page
categorías, por lo que además necesita:Ahora, recorra los elementos deseados de
$cats
:Después del ciclo, puede usar las variables para generar etiquetas anteriores / siguientes o no otro tipo de navegación.
Tenga en cuenta que en realidad no probé este código. Es posible que haya cometido algunos errores al tener en cuenta que el primer elemento de una matriz tiene la clave 0.
fuente