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.