Aggiungere la paginazione a un template di archivio personalizzato

19 set 2018, 18:24:16
Visualizzazioni: 20.6K
Voti: 2

Sto cercando di aggiungere la paginazione al mio template di archivio. Se uso lo stesso codice del mio template principale del blog non filtra i risultati in base al tag nell'URL, ma mostra semplicemente tutti i post. Probabilmente è ovvio per molti ma chiaramente mi sfugge qualcosa.

Sono riuscito a far mostrare alla pagina di archivio solo i post pertinenti utilizzando il seguente codice (ma questo non contiene la paginazione):

<?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">
            Autore: <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ), get_the_author_meta( 'user_nicename' ) ); ?>"><?php the_author(); ?></a>
            &nbsp;&nbsp;|&nbsp;&nbsp;
            Data: <?php the_time('jS F Y') ?>
            <?php if(has_tag()) { ?>
                <br>
                Tag: <?php the_tags( '',', ','' ); ?>
            <?php } else {} ?>
        </p>
        <p><?php the_field('introduction'); ?></p>
        <a href="<?php the_permalink(); ?>">Leggi di più</a>
    </div>
<?php endwhile; endif; wp_reset_postdata(); ?>

Ho anche il mio blog principale che funziona con la paginazione utilizzando il seguente codice:

<?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">
            Autore: <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ), get_the_author_meta( 'user_nicename' ) ); ?>"><?php the_author(); ?></a>
            &nbsp;&nbsp;|&nbsp;&nbsp;
            Data: <?php the_time('jS F Y') ?>
            <?php if(has_tag()) { ?>
                <br>
                Tag: <?php the_tags( '',', ','' ); ?>
            <?php } else {} ?>
        </p>
        <p><?php the_field('introduction'); ?></p>
        <a href="<?php the_permalink(); ?>">Leggi di più</a>
    </div>
<?php endwhile; endif; wp_reset_postdata(); ?>
<!-- PAGINAZIONE -->
<?php
    if (function_exists(custom_pagination)) {
        custom_pagination($custom_query->max_num_pages,"",$paged);
    }
?>

Il codice sopra utilizza anche il seguente codice dal file functions.php:

// PAGINAZIONE
function custom_pagination($numpages = '', $pagerange = '', $paged='') {
    if (empty($pagerange)) {
        $pagerange = 2;
    }
    /**
     * Questa prima parte della nostra funzione è un fallback
     * per la paginazione personalizzata all'interno di un loop regolare che
     * utilizza le variabili globali $paged e $wp_query.
     * 
     * È utile perché ora possiamo sovrascrivere la paginazione predefinita
     * nel nostro tema e utilizzare questa funzione nelle query predefinite
     * e nelle query personalizzate.
     */
    global $paged;
    if (empty($paged)) {
        $paged = 1;
    }
    if ($numpages == '') {
        global $wp_query;
        $numpages = $wp_query->max_num_pages;
        if(!$numpages) {
                $numpages = 1;
        }
    }
    /** 
     * Costruiamo gli argomenti di paginazione da inserire nella nostra funzione
     * 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'       => __('&laquo;'),
        'next_text'       => __('&raquo;'),
        '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 . " di " . $numpages . "</span> ";
            echo $paginate_links;
        echo "</div>";
    }
}

Qualcuno sa come posso far funzionare questa paginazione anche con il mio template di archivio?

Grazie in anticipo,

Tom

0
Tutte le risposte alla domanda 2
2

Dalla versione 4.1.0, WordPress ha introdotto the_posts_pagination per gestire i link di paginazione numerica. Io la uso sempre e funziona perfettamente, con qualsiasi tipo di post personalizzato. Dovresti usare questa funzione dopo il ciclo while.

Vedi: https://developer.wordpress.org/reference/functions/the_posts_pagination/

19 set 2018 19:19:20
Commenti

Grazie per il tuo suggerimento, ma su questo sito stiamo ancora utilizzando la versione 3. Sai come potrei aggiungerlo alla vecchia maniera?

Tom Perkins Tom Perkins
20 set 2018 11:10:30

Funzione eccellente e comoda. Tuttavia, suggerisci di usarla dopo il ciclo while, ma ho provato e ripeteva il codice sopra ogni risultato. Ho posizionato <?php the_posts_pagination( array( 'mid_size' => 2 ) ); ?> immediatamente sopra <?php if (have_posts()) : while(have_posts()) : the_post();?> e ha funzionato correttamente. (E come hai detto tu, "funziona e basta").

user38365 user38365
18 ago 2020 20:08:48
1

Solo un rapido aggiornamento su questo punto: ho scelto di utilizzare il plugin WP-PageNavi (https://en-gb.wordpress.org/plugins/wp-pagenavi/) nella pagina degli archivi e lasciare il blog principale con la paginazione personalizzata che svolge perfettamente il suo lavoro.

20 set 2018 17:11:13
Commenti

Questo dovrebbe far parte della tua domanda

Varsha Dhadge Varsha Dhadge
20 set 2018 17:14:02