Aggiungere la paginazione a un template di archivio personalizzato
Sto cercando di aggiungere la paginazione al mio template di archivio. Se uso lo stesso codice del mio template principale del blog non filtra i risultati in base al tag nell'URL, ma mostra semplicemente tutti i post. Probabilmente è ovvio per molti ma chiaramente mi sfugge qualcosa.
Sono riuscito a far mostrare alla pagina di archivio solo i post pertinenti utilizzando il seguente codice (ma questo non contiene la paginazione):
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="col span_1_of_1 border_bottom">
<h3 class="subtitle no_margin_bottom"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p class="blog_meta_information date">
Autore: <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ), get_the_author_meta( 'user_nicename' ) ); ?>"><?php the_author(); ?></a>
|
Data: <?php the_time('jS F Y') ?>
<?php if(has_tag()) { ?>
<br>
Tag: <?php the_tags( '',', ','' ); ?>
<?php } else {} ?>
</p>
<p><?php the_field('introduction'); ?></p>
<a href="<?php the_permalink(); ?>">Leggi di più</a>
</div>
<?php endwhile; endif; wp_reset_postdata(); ?>
Ho anche il mio blog principale che funziona con la paginazione utilizzando il seguente codice:
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$custom_args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'paged' => $paged
);
$custom_query = new WP_Query( $custom_args );
?>
<?php if( $custom_query->have_posts() ) : while( $custom_query->have_posts() ) : $custom_query->the_post(); ?>
<div class="col span_1_of_1 border_bottom">
<h3 class="subtitle no_margin_bottom"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p class="blog_meta_information date">
Autore: <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ), get_the_author_meta( 'user_nicename' ) ); ?>"><?php the_author(); ?></a>
|
Data: <?php the_time('jS F Y') ?>
<?php if(has_tag()) { ?>
<br>
Tag: <?php the_tags( '',', ','' ); ?>
<?php } else {} ?>
</p>
<p><?php the_field('introduction'); ?></p>
<a href="<?php the_permalink(); ?>">Leggi di più</a>
</div>
<?php endwhile; endif; wp_reset_postdata(); ?>
<!-- PAGINAZIONE -->
<?php
if (function_exists(custom_pagination)) {
custom_pagination($custom_query->max_num_pages,"",$paged);
}
?>
Il codice sopra utilizza anche il seguente codice dal file functions.php:
// PAGINAZIONE
function custom_pagination($numpages = '', $pagerange = '', $paged='') {
if (empty($pagerange)) {
$pagerange = 2;
}
/**
* Questa prima parte della nostra funzione è un fallback
* per la paginazione personalizzata all'interno di un loop regolare che
* utilizza le variabili globali $paged e $wp_query.
*
* È utile perché ora possiamo sovrascrivere la paginazione predefinita
* nel nostro tema e utilizzare questa funzione nelle query predefinite
* e nelle query personalizzate.
*/
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
/**
* Costruiamo gli argomenti di paginazione da inserire nella nostra funzione
* paginate_links.
*/
$pagination_args = array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%',
'total' => $numpages,
'current' => $paged,
'show_all' => False,
'end_size' => 1,
'mid_size' => $pagerange,
'prev_next' => True,
'prev_text' => __('«'),
'next_text' => __('»'),
'type' => 'plain',
'add_args' => false,
'add_fragment' => ''
);
$paginate_links = paginate_links($pagination_args);
if ($paginate_links) {
echo "<div class='custom-pagination'>";
echo "<span class='page-numbers page-num'>Pagina " . $paged . " di " . $numpages . "</span> ";
echo $paginate_links;
echo "</div>";
}
}
Qualcuno sa come posso far funzionare questa paginazione anche con il mio template di archivio?
Grazie in anticipo,
Tom

Dalla versione 4.1.0, WordPress ha introdotto the_posts_pagination
per gestire i link di paginazione numerica. Io la uso sempre e funziona perfettamente, con qualsiasi tipo di post personalizzato. Dovresti usare questa funzione dopo il ciclo while
.
Vedi: https://developer.wordpress.org/reference/functions/the_posts_pagination/

Grazie per il tuo suggerimento, ma su questo sito stiamo ancora utilizzando la versione 3. Sai come potrei aggiungerlo alla vecchia maniera?

Funzione eccellente e comoda. Tuttavia, suggerisci di usarla dopo il ciclo while
, ma ho provato e ripeteva il codice sopra ogni risultato. Ho posizionato <?php the_posts_pagination( array( 'mid_size' => 2 ) ); ?>
immediatamente sopra <?php if (have_posts()) : while(have_posts()) : the_post();?>
e ha funzionato correttamente. (E come hai detto tu, "funziona e basta").

Solo un rapido aggiornamento su questo punto: ho scelto di utilizzare il plugin WP-PageNavi (https://en-gb.wordpress.org/plugins/wp-pagenavi/) nella pagina degli archivi e lasciare il blog principale con la paginazione personalizzata che svolge perfettamente il suo lavoro.
