Utilizarea paginate_links() pentru a genera paginări de tip "1, 2, 3 ... 10, 20, 30, 40... 55"
Am găsit acest cod:
// Obține numărul total de pagini
global $wp_query;
$total = $wp_query->max_num_pages;
// Paginează doar dacă avem mai mult de o pagină
if ( $total > 1 ) {
// Obține pagina curentă
if ( !$current_page = get_query_var('paged') )
$current_page = 1;
// Structura pentru "format" depinde dacă folosim permalinkuri frumoase
$permalinks = get_option('permalink_structure');
$format = empty( $permalinks ) ? '&page=%#%' : 'page/%#%/';
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => $format,
'current' => $current_page,
'total' => $total,
'mid_size' => 2,
'type' => 'list'
));
}
Funcționează ok dar generează o paginare de tipul "1, 2, 3 ... ULTIMAPAGINĂ", am văzut plugin-uri care generează paginări de genul "1, 2, 3... 19, 20, 30 ... ULTIMAPAGINĂ".
Poate fi realizat acest lucru folosind funcția paginate_links()?
Nu vreau să adaug un plugin doar pentru această mică ajustare.

Funcția paginate_links()
face acest lucru implicit. Parametrul de control este mid_size
, care determină numărul de linkuri de pagină din jurul paginii curente care vor fi afișate. Valoarea implicită este 2
.
Înseamnă că, dacă ai 12 pagini și pagina curentă este Pagina 1, paginația va arăta astfel:
1 2 3 ... 12
Dar dacă pagina curentă este Pagina 6, paginația va arăta astfel:
1 ... 4 5 6 7 8 ... 12
Este posibil să greșesc, dar cred că așa funcționează majoritatea plugin-urilor de paginare.
Editare
Scuze, am citit greșit întrebarea inițial și nu am înțeles că vrei să afișezi fiecare a zecea pagină în linkurile de paginare.
Această funcție nu are un parametru integrat pentru a face ceea ce dorești. Cea mai bună soluție ar fi să setezi 'show_all'
la true
, să schimbi 'type'
în 'array'
și apoi să construiești manual ieșirea prin iterarea valorilor din array.

http://codex.wordpress.org/Function_Reference/paginate_links
Ceea ce cauți este parametrul 'end_size', adaugă-l în array-ul de argumente cu valoarea dorită.

$paged = (get_query_var('page')) ? get_query_var('page') : 1;
$args= new WP_Query(array(
'post_type'=>'card', // Tipul postului
'posts_per_page' => 6, // Numărul de postări pe pagină
'paged' => $paged, // Pagina curentă
));
if($args->have_posts()) :
while($args->have_posts()) : $args->the_post();
$permalink=get_the_permalink(get_the_ID()); // Obține link-ul permanent
$title=get_the_title(); // Obține titlul postării
echo '<div class="col-md-4 card-details"><a href="'.$permalink.'">';
echo '<div class="card-img">';the_post_thumbnail('thumbnail');echo '</div>'; // Afișează imaginea miniatură
echo '<div class="card-title"><h4>'.$title.'</h4></a>';
echo'</div>';
echo '</div>';
endwhile;
$total_pages = $args->max_num_pages; // Numărul total de pagini
?>
<div class="greetings-pagination col-md-12">
<?php
if ($total_pages > 1){
$current_page = max(1, get_query_var('page')); // Pagina curentă
echo paginate_links(array( // Afișează paginarea
'base' => get_pagenum_link(1) . '%_%',
'format' => '/page/%#%',
'current' => $current_page,
'total' => $total_pages,
'prev_text' => __('precedent'), // Text pentru butonul "precedent"
'next_text' => __('următor'), // Text pentru butonul "următor"
));
}
?>
</div>
<?php else :?>
<h3><?php _e('Eroare 404: Nu a fost găsit', ''); ?></h3> // Mesaj de eroare 404
<?php endif; ?>
<?php wp_reset_postdata();?> // Resetează datele postului

Pe site-ul WordPress pentru dezvoltatori sunt menționate câțiva parametri. Aceasta este pagina despre această funcție. Poți verifica 'end_size' pentru mai multe informații.
Și încă am o întrebare. Folosesc <?php echo paginate_links(); ?>
în template-ul temei mele și funcționează perfect (așa cum arată imaginea).
Dar nu sunt sigur dacă ar putea cauza alte probleme.
