Quero exibir uma página de arquivo com paginação que lista todas as categorias no meu site e cada link vai para essa página de arquivo de categoria específica. Portanto, isso seria como uma página de arquivo da categoria.
Cada categoria no meu site tem uma miniatura personalizada criada manualmente para corresponder ao link permanente da categoria. Já tenho uma configuração de layout para exibir todas as categorias, mas estou fazendo isso com um modelo de página personalizado, para que não haja paginação. Isso significa que todas as categorias são exibidas em uma única página, o que é um pouco irritante (eu tenho mais de 100 categorias).
Meu arquivo atual é configurado com um nome de modelo de página personalizado específico, page-catlist.php
mas estou disposto a alterá-lo para qualquer outro tipo de arquivo de modelo.
Aqui está o código atual que estou usando para gerar todas as categorias em uma 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 exista uma maneira melhor de fazer isso para que eu possa adicionar paginação natural, idealmente com o WP-PageNavi. Qualquer ajuda seria muito apreciada!
fonte
Respostas:
Paginar uma lista de termos / categorias / tags é bastante fácil e, para isso, você precisa de informações mínimas.
Vamos olhar para o que precisamos
a quantidade de termos
a quantidade de termos por página
get_terms()
( Observe que o uso deget_terms()
foi alterado na versão 4.5 ). Você também pode usar,get_categories()
se desejar,get_categories()
é apenas uma função de invólucro paraget_terms()
Então, primeiro precisamos contar a quantidade de termos. Para isso, usaremos o
count
parâmetro emget_terms()
NOTA:
Todo o código não foi testado e requer pelo menos
PHP 5.4
WordPress 4.5
Você pode facilmente converter isso para funcionar com versões mais antigas do PHP e WordPress
Agora que sabemos a quantidade de termos, podemos definir a quantidade de termos que precisamos por página, digamos 10
Pelo exposto, agora podemos calcular quantas páginas teremos. O valor aqui será passado para a função requer paginação, no seu caso, para
wp_pagenavi()
Nesse caso, você passaria
$max_num_pages
para sua função de paginaçãoA próxima parte seria calcular nosso deslocamento. Queremos recuperar apenas a quantidade relevante de termos por página para manter as coisas otimizadas. Não precisamos de mais de 100 termos por página. Consultar apenas os 10 necessários é muito mais rápido. Portanto, precisamos saber em que página estamos, a partir disso, calcularemos um deslocamento. Isso será passado para
get_terms()
e informaráget_terms()
quantos termos devem ser pulados do ponto de partida inicial.Depois disso, devemos também dizer
get_terms()
para retornar apenas 10 termos. Vamos olhar o código para esta peçaVocê terá apenas 10 termos por página, de acordo com a paginação. Agora você pode alternar normalmente pelos seus termos
Apenas uma observação, você gostaria de ter certeza de que realmente recebeu os termos retornados de sua
get_terms()
função.fonte
wp_pagnavi()
realmente vai funcionar neste caso?next_posts_link()
,previous_posts_link()
epaginate_links()
. Também funcionaria com qualquer função de paginação em que você possa passar um valor inteiro para a função, como minha função de paginação aqui . Quanto awp_pagenavi()
, não posso dizer sim ou não, pois realmente não tenho idéia de como essa função funciona, você precisará testá-la. No meu código acima,$max_num_pages
detém a quantidade de páginas, é um valor inteiro, é esta variável que você precisa para passar para funções para paginação calcularEu não estou familiarizado com o WP-PageNavi, mas suspeito que ele esteja lidando com postagens, por isso pode facilmente estragar se você o usar em um loop como o seu. Talvez o css ainda possa ser útil para estilizar seu html. De qualquer forma, configurar sua própria paginação não é tão difícil.
Primeiro, você precisa saber quantas categorias existem:
Em seguida, você precisa determinar quantos itens por página deseja:
Isso fornecerá a quantidade de páginas:
A terceira informação necessária é a página em que você está. Você pode acompanhar isso introduzindo um
query_var
URL que será parecido com o seguinte:www.example.com/yourcatpage?catpage=2
Antes de iniciar o loop, você precisa saber qual página é chamada:
A partir disso, você pode chamar o primeiro elemento que deseja exibir:
e o último:
A última página pode conter menos de
$cats_per_page
categorias, portanto, você também precisa de:Agora, percorra os elementos desejados de
$cats
:Após o loop, você pode usar as variáveis para gerar tags anteriores / seguintes ou não outro tipo de navegação.
Cuidado para não testar esse código. Eu posso ter cometido alguns erros ao considerar que o primeiro elemento de uma matriz possui a chave 0.
fonte