Paginazione numerica per custom post type

31 dic 2016, 09:41:31
Visualizzazioni: 29.9K
Voti: 2

Ho creato una pagina personalizzata per visualizzare un loop di custom post type con campi personalizzati.

Ho bisogno di aggiungere una paginazione numerica e ho provato con questo codice ma non funziona.

Functions.php

function pagination_bar() {
    global $wp_query;

    $total_pages = $wp_query->max_num_pages;

    if ($total_pages > 1){
        $current_page = max(1, get_query_var('paged'));

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

custompage.php

<!--Loop Salmi-->
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$loop = new WP_Query( array( 'post_type' => 'salmi',
        'posts_per_page' => 15,
        'paged'          => $paged )
);
while ( $loop->have_posts() ) : $loop->the_post(); ?>

    <!--Colonne Contenuto -->
    <div class="salmicpt">
        <div class="wpb_column vc_column_container td-pb-span8">
            <div class="titlecpt"><?php the_title(); ?></div>
        </div>
        <div class="wpb_column vc_column_container td-pb-span4">
            <?php if( get_field('audio_salmi') ): ?>
                <a href="<?php the_field('audio_salmi'); ?>" ><img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Ascolta" title="Ascolta" /></a>
            <?php endif; ?>
            <?php if( get_field('salmi_pdf') ): ?>
                <a href="<?php the_field('salmi_pdf'); ?>" ><img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Scarica il PDF" title="Scarica il PDF" /></a>
            <?php endif; ?>
        </div>
        <div style='clear:both'></div><hr class="style-one" />
    </div>
    <nav class="pagination">
        <?php pagination_bar(); ?>
    </nav>

<?php endwhile; wp_reset_query(); ?>

Dove sta l'errore? Grazie

0
Tutte le risposte alla domanda 3
1
10

Stai facendo riferimento all'oggetto global $wp_query nella tua funzione che hai resettato usando wp_reset_query().

Puoi risolvere il problema della paginazione passando il tuo oggetto $loop WP_Query personalizzato alla funzione. Ho anche cambiato wp_reset_query in wp_reset_postdata

Inoltre, stai chiamando la tua funzione di paginazione all'interno del ciclo while invece che dopo di esso.

La tua funzione dovrebbe essere aggiornata in questo modo:

function pagination_bar( $custom_query ) {

    $total_pages = $custom_query->max_num_pages;
    $big = 999999999; // serve un numero improbabilmente grande

    if ($total_pages > 1){
        $current_page = max(1, get_query_var('paged'));

        echo paginate_links(array(
            'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format' => '?paged=%#%',
            'current' => $current_page,
            'total' => $total_pages,
        ));
    }
}

e nel tuo file custompage.php:

<!--Loop Salmi-->
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$loop = new WP_Query( array( 'post_type' => 'salmi',
        'posts_per_page' => 15,
        'paged'          => $paged )
);
if ( $loop->have_posts() ):
    while ( $loop->have_posts() ) : $loop->the_post(); ?>

    <!--Colonne Contenuto -->
    <div class="salmicpt">
        <div class="wpb_column vc_column_container td-pb-span8">
            <div class="titlecpt"><?php the_title(); ?></div>
        </div>
        <div class="wpb_column vc_column_container td-pb-span4">
            <?php if( get_field('audio_salmi') ): ?>
                <a href="<?php the_field('audio_salmi'); ?>" ><img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Ascolta" title="Ascolta" /></a>
            <?php endif; ?>
            <?php if( get_field('salmi_pdf') ): ?>
                <a href="<?php the_field('salmi_pdf'); ?>" ><img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Scarica il PDf" title="Scarica il PDF" /></a>
            <?php endif; ?>
        </div>
        <div style='clear:both'></div><hr class="style-one" />
    </div>
    <?php endwhile; ?>
    <nav class="pagination">
        <?php pagination_bar( $loop ); ?>
    </nav>
<?php wp_reset_postdata();
endif;
31 dic 2016 11:53:46
Commenti

Grazie mille ma il problema persiste.. vedo la paginazione ma se clicco non vado alla seconda pagina ma si ricarica e rimango sulla stessa pagina.

I link sui numeri delle pagine sono http://mysite.it/page/2/page/2/page/2/page/3?page_id=415/page/3

skifast skifast
11 gen 2017 20:15:02
1

copia e incolla nel tuo file functions.php

function pagination_bar( $query_wp ) 
{
    $pages = $query_wp->max_num_pages;
    $big = 999999999; // numero improbabilmente grande
    if ($pages > 1)
    {
        $page_current = max(1, get_query_var('paged'));
        echo paginate_links(array(
            'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format' => '?paged=%#%',
            'current' => $page_current,
            'total' => $pages,
        ));
    }
}

**copia e incolla il codice nel tuo file custompage.php **

<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array('post_type'=>'salmi','posts_per_page' => 15,'paged' => $paged);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ):
    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>    
    <!--Colonne Contenuto -->
    <div class="salmicpt">
        <div class="wpb_column vc_column_container td-pb-span8">
            <div class="titlecpt"><?php the_title(); ?></div>
        </div>
        <div class="wpb_column vc_column_container td-pb-span4">
            <?php if( get_field('audio_salmi') ): ?>
                <a href="<?php the_field('audio_salmi'); ?>" >
                    <img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Ascolta" title="Ascolta" />
                </a>
            <?php endif; ?>
            <?php if( get_field('salmi_pdf') ): ?>
                <a href="<?php the_field('salmi_pdf'); ?>" >
                    <img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Scarica il PDF" title="Scarica il PDF" />
                </a>
            <?php endif; ?>
        </div>
        <div style='clear:both'></div><hr class="style-one" />
    </div>
    <?php endwhile; ?>
    <nav class="pagination">
        <?php pagination_bar( $the_query ); ?>
    </nav>
<?php wp_reset_postdata();
endif;
26 mar 2018 10:12:30
Commenti

Dovresti spiegare cosa fa questo codice e come risolve il problema. Al momento è solo un dump di codice. Non molto utile.

Jacob Peattie Jacob Peattie
26 mar 2018 13:00:57
1

Apporta le seguenti modifiche nel file custompage.php

<?php
$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
$args = array('post_type'=>'salmi','posts_per_page' => 15,'paged' => $paged);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ):
    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>    
    <!--Colonne Contenuto -->
    <div class="salmicpt">
        <div class="wpb_column vc_column_container td-pb-span8">
            <div class="titlecpt"><?php the_title(); ?></div>
        </div>
        <div class="wpb_column vc_column_container td-pb-span4">
            <?php if( get_field('audio_salmi') ): ?>
                <a href="<?php the_field('audio_salmi'); ?>" >
                    <img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Ascolta" title="Ascolta" />
                </a>
            <?php endif; ?>
            <?php if( get_field('salmi_pdf') ): ?>
                <a href="<?php the_field('salmi_pdf'); ?>" >
                    <img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Scarica il PDf" title="Scarica il PDF" />
                </a>
            <?php endif; ?>
        </div>
        <div style='clear:both'></div><hr class="style-one" />
    </div>
    <?php endwhile; ?>
    <nav class="pagination">
        <?php pagination_bar( $the_query ); ?>
    </nav>
<?php wp_reset_postdata();
endif;
</div>

E nel file functions.php

function pagination_bar( $query_wp ) 
{
$pages = $query_wp->max_num_pages;
$big = 999999999; // un numero improbabile
if ($pages > 1)
{
    $page_current = max(1, get_query_var('page'));
    echo paginate_links(array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => $page_current,
        'total' => $pages,
    ));
}
}

Funziona perfettamente

28 lug 2020 18:54:33
Commenti

È utile aggiungere una breve descrizione di cosa è cambiato e perché. Ciò migliora notevolmente il valore delle tue risposte per le persone che potrebbero avere il problema dalla domanda originale.

mozboz mozboz
28 lug 2020 19:54:55