Числовая пагинация для произвольного типа записей

31 дек. 2016 г., 09:41:31
Просмотры: 29.9K
Голосов: 2

Я создал пользовательскую страницу для отображения цикла произвольного типа записей с произвольными полями.

Мне нужно добавить числовую пагинацию, и я пробовал этот код, но он не работает.

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

<!--Цикл Псалмов-->
<?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(); ?>

    <!--Колонки с содержимым-->
    <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="Прослушать" title="Прослушать" /></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="Скачать PDF" title="Скачать 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(); ?>

Где ошибка? Спасибо

0
Все ответы на вопрос 3
1
10

Вы ссылаетесь на объект global $wp_query в вашей функции, который вы сбросили с помощью wp_reset_query().

Вы можете решить проблему с пагинацией, передав ваш пользовательский объект $loop WP_Query в функцию. Также я заменил wp_reset_query на wp_reset_postdata.

Также вы вызываете функцию пагинации внутри цикла while, а не после него.

Ваша функция должна быть обновлена до:

function pagination_bar( $custom_query ) {

    $total_pages = $custom_query->max_num_pages;
    $big = 999999999; // маловероятное целое число

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

и в вашем файле custompage.php:

<!--Цикл 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(); ?>

    <!--Колонка с контентом -->
    <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="Слушать" title="Слушать" /></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="Скачать PDF" title="Скачать 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 дек. 2016 г. 11:53:46
Комментарии

Большое спасибо, но проблема осталась.. Я вижу пагинацию, но при клике на вторую страницу она не переходит, а просто перезагружается и остается на той же странице.

Ссылки на номера страниц выглядят так: http://mysite.it/page/2/page/2/page/2/page/3?page_id=415/page/3

skifast skifast
11 янв. 2017 г. 20:15:02
1

скопируйте и вставьте в ваш файл functions.php

function pagination_bar( $query_wp ) 
{
    $pages = $query_wp->max_num_pages;
    $big = 999999999; // маловероятное целое число
    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,
        ));
    }
}

**скопируйте и вставьте код в ваш файл 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(); ?>    
    <!-- Колонка с контентом -->
    <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="Слушать" title="Слушать" />
                </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="Скачать PDF" title="Скачать 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 мар. 2018 г. 10:12:30
Комментарии

Вам следует объяснить, что делает этот код и как он решает проблему. В данный момент это просто свалка кода. Не очень полезно.

Jacob Peattie Jacob Peattie
26 мар. 2018 г. 13:00:57
1

Внесите следующие изменения в файл 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(); ?>    
    <!--Колонка с содержимым -->
    <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="Слушать" title="Слушать" />
                </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="Скачать PDF" title="Скачать 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>

И в functions.php

function pagination_bar( $query_wp ) 
{
$pages = $query_wp->max_num_pages;
$big = 999999999; // маловероятное целое число
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,
    ));
}
}

Это работает отлично

28 июл. 2020 г. 18:54:33
Комментарии

Полезно добавить небольшое описание того, что изменилось и почему. Это значительно повышает ценность ваших ответов для людей, у которых может быть проблема из исходного вопроса.

mozboz mozboz
28 июл. 2020 г. 19:54:55