Adăugarea paginării într-un șablon arhivă personalizat
Încerc să adaug paginare în șablonul meu de arhivă. Dacă folosesc același cod ca în șablonul principal de blog, nu filtrează rezultatele bazate pe eticheta din URL, în schimb arată toate articolele. Probabil este evident pentru majoritatea, dar clar îmi scapă ceva.
Am reușit să fac pagina de arhivă să arate doar articolele relevante folosind următorul cod (dar acesta nu conține paginare):
<?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>
|
Data: <?php the_time('jS F Y') ?>
<?php if(has_tag()) { ?>
<br>
Etichete: <?php the_tags( '',', ','' ); ?>
<?php } else {} ?>
</p>
<p><?php the_field('introduction'); ?></p>
<a href="<?php the_permalink(); ?>">Citește mai mult</a>
</div>
<?php endwhile; endif; wp_reset_postdata(); ?>
De asemenea, am blogul principal funcțional cu paginare folosind următorul cod:
<?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>
|
Data: <?php the_time('jS F Y') ?>
<?php if(has_tag()) { ?>
<br>
Etichete: <?php the_tags( '',', ','' ); ?>
<?php } else {} ?>
</p>
<p><?php the_field('introduction'); ?></p>
<a href="<?php the_permalink(); ?>">Citește mai mult</a>
</div>
<?php endwhile; endif; wp_reset_postdata(); ?>
<!-- PAGINARE -->
<?php
if (function_exists(custom_pagination)) {
custom_pagination($custom_query->max_num_pages,"",$paged);
}
?>
Codul de mai sus folosește, de asemenea, următorul cod din fișierul functions.php:
// PAGINARE
function custom_pagination($numpages = '', $pagerange = '', $paged='') {
if (empty($pagerange)) {
$pagerange = 2;
}
/**
* Această primă parte a funcției noastre este o rezervă
* pentru paginarea personalizată în interiorul unei bucle regulate care
* folosește variabilele globale $paged și $wp_query.
*
* Este bine deoarece acum putem suprascrie paginarea implicită
* în tema noastră și putem folosi această funcție în interogări implicite
* și interogări personalizate.
*/
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
/**
* Construim argumentele paginării pentru a le introduce în funcția noastră
* 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 . " din " . $numpages . "</span> ";
echo $paginate_links;
echo "</div>";
}
}
Știe cineva cum pot face această paginare să funcționeze și cu șablonul meu de arhivă?
Mulțumesc anticipat,
Tom
Începând cu versiunea 4.1.0, WordPress a introdus funcția the_posts_pagination
pentru gestionarea link-urilor de paginare numerică. O folosesc mereu și funcționează perfect. Cu orice tip de postare personalizată. Veți dori să folosiți această funcție după bucla while
.
Consultați: https://developer.wordpress.org/reference/functions/the_posts_pagination/

Mulțumesc pentru sugestie, dar încă folosim versiunea 3 pe acest site. Știi cum aș putea să o adaug în modul tradițional?

Funcție excelentă și convenabilă. Totuși, sugerezi să o folosești după bucla while
, dar am încercat asta și a repetat codul de deasupra fiecărui rezultat. Am plasat <?php the_posts_pagination( array( 'mid_size' => 2 ) ); ?>
imediat înainte de <?php if (have_posts()) : while(have_posts()) : the_post();?>
și a funcționat corect. (Și cum ai spus, "pur și simplu funcționează").

Doar o actualizare rapidă la aceasta: am ales să folosesc plugin-ul WP-PageNavi (https://en-gb.wordpress.org/plugins/wp-pagenavi/) pe pagina de arhive și să las blogul principal folosind paginarea personalizată care își face treaba perfect.
