Utilizarea paginate_links() pentru a genera paginări de tip "1, 2, 3 ... 10, 20, 30, 40... 55"

12 nov. 2011, 21:08:36
Vizualizări: 30.5K
Voturi: 3

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.

0
Toate răspunsurile la întrebare 4
0

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.

5 apr. 2012 02:28:04
0

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ă.

27 feb. 2012 13:32:55
1
$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&#58; Nu a fost găsit', ''); ?></h3> // Mesaj de eroare 404
    <?php endif; ?>
    <?php wp_reset_postdata();?>  // Resetează datele postului
17 apr. 2017 12:12:17
Comentarii

Doar copiați codul inclusiv primele două linii și veți obține paginare pentru tipul personalizat de postare, asta e tot.

MZK MZK
17 apr. 2017 12:19:57
0

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).previzualizare paginare

Dar nu sunt sigur dacă ar putea cauza alte probleme.

14 nov. 2017 18:41:18