Paginare numerică pentru tipuri de postări personalizate

31 dec. 2016, 09:41:31
Vizualizări: 29.9K
Voturi: 2

Am creat o pagină personalizată pentru a afișa o buclă de CPT cu câmpuri personalizate.

Trebuie să adaug o paginare numerică și am încercat cu acest cod dar nu funcționează.

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

<!--Buclă Psalmi-->
<?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(); ?>

    <!--Coloane Conținut-->
    <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="Ascultă" title="Ascultă" /></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="Descarcă PDF" title="Descarcă 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(); ?> 

Unde este greșeala?? Mulțumesc

0
Toate răspunsurile la întrebare 3
1
10

Faci referire la obiectul global $wp_query în funcția ta, pe care l-ai resetat folosind wp_reset_query().

Poți rezolva problema de paginare prin transmiterea obiectului tău personalizat $loop WP_Query către funcție. De asemenea, am schimbat wp_reset_query în wp_reset_postdata.

De asemenea, apelezi funcția de paginare în interiorul loop-ului while în loc să o apelezi după acesta.

Funcția ta ar trebui actualizată astfel:

function pagination_bar( $custom_query ) {

    $total_pages = $custom_query->max_num_pages;
    $big = 999999999; // un număr foarte mare și improbabil

    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,
        ));
    }
}

iar în fișierul tău 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(); ?>

    <!--Coloane Conținut -->
    <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="Ascultă" title="Ascultă" /></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="Descarcă PDF" title="Descarcă 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 dec. 2016 11:53:46
Comentarii

Mulțumesc mult, dar problema rămâne.. văd paginarea, dar dacă dau click nu merge pe a doua pagină, ci se reîncarcă și rămâne pe aceeași pagină.

Linkurile pe numărul de pagină sunt http://mysite.it/page/2/page/2/page/2/page/3?page_id=415/page/3

skifast skifast
11 ian. 2017 20:15:02
1

copiază și lipește în fișierul tău functions.php

function pagination_bar( $query_wp ) 
{
    $pages = $query_wp->max_num_pages;
    $big = 999999999; // un număr improbabil de mare
    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,
        ));
    }
}

**copiază și lipește codul în fișierul tău 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(); ?>    
    <!--Coloana Conținut -->
    <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="Ascultă" title="Ascultă" />
                </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="Descarcă PDF-ul" title="Descarcă PDF-ul" />
                </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
Comentarii

Ar trebui să explici ce face acest cod și cum rezolvă problema. În momentul de față este doar un simplu fragment de cod. Nu este foarte folositor.

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

Faceți următoarele modificări în fișierul 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(); ?>    
    <!--Coloana Conținut -->
    <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="Ascultă" title="Ascultă" />
                </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="Descarcă PDF-ul" title="Descarcă PDF-ul" />
                </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>

Și în functions.php

function pagination_bar( $query_wp ) 
{
$pages = $query_wp->max_num_pages;
$big = 999999999; // un număr improbabil
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,
    ));
}
}

Acest lucru funcționează perfect

28 iul. 2020 18:54:33
Comentarii

Este util să adaugi o mică descriere a ceea ce s-a schimbat și de ce. Acest lucru îmbunătățește semnificativ valoarea răspunsurilor tale pentru persoanele care ar putea avea problema din întrebarea originală.

mozboz mozboz
28 iul. 2020 19:54:55