Utilizarea paginate_links() pentru a genera paginări „1, 2, 3 … 10, 20, 30, 40… 55” (WordPress, Paginare)

tryon a intrebat.

Am găsit acest cod :

    // Get total number of pages
    global $wp_query;
    $total = $wp_query->max_num_pages;
    // Only paginate if we have more than one page
    if ( $total > 1 )  {
         // Get the current page
         if ( !$current_page = get_query_var('paged') )
              $current_page = 1;
         // Structure of “format” depends on whether we’re using pretty permalinks
        $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ă bine, dar generează o paginare de tipul „1, 2, 3 …. LASTPAGENUMBER”, am văzut plugin-uri care generează paginări de genul „1, 2, 3… 19, 20, 30 … LASTPAGENUMBER”.

Se poate realiza acest lucru folosind funcția paginate_links()?

Nu vreau să adaug un plugin doar pentru această mică modificare.

4 răspunsuri
Chip Bennett

The paginate_links() face acest lucru în mod implicit. Parametrul de control este mid_size, care determină numărul de legături de pagină din jurul paginii curente care trebuie afișate. Valoarea implicită este 2.

Acest lucru înseamnă că, presupunând că aveți 12 pagini, iar pagina curentă este Pagina 1, paginarea va arăta astfel:

1 2 3 ... 12

Dar dacă pagina curentă este Pagina 6, paginarea va arăta astfel:

1 ... 4 5 6 7 8 ... 12

S-ar putea să mă înșel, dar cred că că așa trebuie să funcționeze Plugin-urile de legătură cu paginarea.

Editați

Scuze, am citit greșit întrebarea dvs. la început și nu am înțeles că doriți să scoateți la ieșire fiecare a zecea pagină în linkurile de paginare.

Această funcție nu are un parametru încorporat pentru a face ceea ce doriți. Cea mai bună soluție ar fi să setați 'show_all' la true, modificați 'type' la 'array'și apoi să construiți singur rezultatul, parcurgând în buclă valorile din matrice.

Andre Lohan

http://codex.wordpress.org/Function_Reference/paginate_links

Ceea ce căutați este „end_size”, adăugați acest lucru la array-ul de argumente cu valoarea dorită.

MZK
$paged = (get_query_var('page')) ? get_query_var('page') : 1;

$args= new WP_Query(array(
        'post_type'=>'card',
        'posts_per_page' => 6,
        'paged' => $paged,
    ));  


    if($args->have_posts()) :

        while($args->have_posts())  : $args->the_post();

        $permalink=get_the_permalink(get_the_ID());
        $title=get_the_title();

        echo '<div class="col-md-4 card-details"><a href="'.$permalink.'">';
        echo '<div class="card-img">';the_post_thumbnail('thumbnail');echo '</div>';
        echo '<div class="card-title"><h4>'.$title.'</h4></a>';
        echo'</div>';
        echo '</div>';

        endwhile;

        $total_pages = $args->max_num_pages;

        ?>

        <div class="greetings-pagination col-md-12">

        <?php

        if ($total_pages > 1){

            $current_page = max(1, get_query_var('page'));

            echo paginate_links(array(
                'base' => get_pagenum_link(1) . '%_%',
                'format' => '/page/%#%',
                'current' => $current_page,
                'total' => $total_pages,
                'prev_text'    => __('prev'),
                'next_text'    => __('next'),
            ));
        }

    ?>  

    </div>

    <?php else :?>
    <h3><?php _e('404 Error&#58; Not Found', ''); ?></h3>
    <?php endif; ?>
    <?php wp_reset_postdata();?>  

Comentarii

  • Doar copiați codul, inclusiv primele două linii & veți obține paginarea pentru tipul de post personalizat, asta e tot. –  > Por MZK .
user131483

În site-ul web al dezvoltatorului WordPress a menționat unii parametri.acesta este pagina despre această funcție.Puteți verifica ‘end_size’ pentru mai multe informații.

Și încă mai am o întrebare.folosesc <?php echo paginate_links(); ?> în șablonul temei mele și funcționează perfect(După cum arată imaginea).

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