Añadiendo paginación a una plantilla de archivo personalizada
Estoy tratando de añadir paginación a mi plantilla de archivo. Si uso el mismo código que en mi plantilla principal del blog, no filtra los resultados basados en la etiqueta de la URL, en su lugar simplemente muestra todas las entradas. Probablemente sea obvio para la mayoría, pero claramente me estoy perdiendo algo.
He logrado que la página de archivo muestre solo las entradas relevantes usando el siguiente código (pero este no contiene paginación):
<?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">
Autor: <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ), get_the_author_meta( 'user_nicename' ) ); ?>"><?php the_author(); ?></a>
|
Fecha: <?php the_time('jS F Y') ?>
<?php if(has_tag()) { ?>
<br>
Etiquetas: <?php the_tags( '',', ','' ); ?>
<?php } else {} ?>
</p>
<p><?php the_field('introduction'); ?></p>
<a href="<?php the_permalink(); ?>">Leer más</a>
</div>
<?php endwhile; endif; wp_reset_postdata(); ?>
También tengo mi blog principal funcionando con paginación usando el siguiente código:
<?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">
Autor: <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ), get_the_author_meta( 'user_nicename' ) ); ?>"><?php the_author(); ?></a>
|
Fecha: <?php the_time('jS F Y') ?>
<?php if(has_tag()) { ?>
<br>
Etiquetas: <?php the_tags( '',', ','' ); ?>
<?php } else {} ?>
</p>
<p><?php the_field('introduction'); ?></p>
<a href="<?php the_permalink(); ?>">Leer más</a>
</div>
<?php endwhile; endif; wp_reset_postdata(); ?>
<!-- PAGINACIÓN -->
<?php
if (function_exists(custom_pagination)) {
custom_pagination($custom_query->max_num_pages,"",$paged);
}
?>
Lo anterior también usa el siguiente código de mi archivo functions.php:
// PAGINACIÓN
function custom_pagination($numpages = '', $pagerange = '', $paged='') {
if (empty($pagerange)) {
$pagerange = 2;
}
/**
* Esta primera parte de nuestra función es una alternativa
* para la paginación personalizada dentro de un bucle regular que
* usa las variables globales $paged y $wp_query.
*
* Es bueno porque ahora podemos anular la paginación predeterminada
* en nuestro tema y usar esta función en consultas predeterminadas
* y consultas personalizadas.
*/
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
/**
* Construimos los argumentos de paginación para ingresar en nuestra función
* 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'>Página " . $paged . " de " . $numpages . "</span> ";
echo $paginate_links;
echo "</div>";
}
}
¿Alguien sabe cómo puedo hacer que esta paginación también funcione con mi plantilla de archivo?
Gracias de antemano,
Tom

Desde la versión 4.1.0, WordPress introdujo the_posts_pagination
para manejar los enlaces de paginación numérica. Lo uso todo el tiempo y simplemente funciona. Con cualquier tipo de contenido personalizado. Deberás usar esta función después del bucle while
.
Ver: https://developer.wordpress.org/reference/functions/the_posts_pagination/

Gracias por tu sugerencia, pero todavía estamos usando la versión 3 en este sitio. ¿Sabes cómo podría agregarlo de la manera tradicional?

Excelente y conveniente función. Sin embargo, sugieres usarla después del bucle while
, pero probé eso y repetía el código anterior en cada resultado. Coloqué <?php the_posts_pagination( array( 'mid_size' => 2 ) ); ?>
inmediatamente antes de <?php if (have_posts()) : while(have_posts()) : the_post();?>
y funcionó correctamente. (Y como dijiste, "simplemente funciona").

Una actualización rápida sobre esto: decidí usar el plugin WP-PageNavi (https://en-gb.wordpress.org/plugins/wp-pagenavi/) en la página de archivos y dejar el blog principal usando la paginación personalizada que funciona perfectamente.
