WordPress: вывод постов на странице с пагинацией

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

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

Вывод постов на странице с пагинацией

В примере ничего сверхъестественного не используется, только стандартные функции WordPress. Сделайте шаблон страницы своей темы в дочерней теме. И поместите в него вот этот цикл. Только исправьте ID категории, из которой нужно вывести посты. В оформлении внешнего вида вам поможет CSS.

<?php
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $query = new WP_Query( array(
        'cat' => 5,45,//ID категории, из которой выводить посты
        'posts_per_page' => 16,//количество постов
        'paged' => $paged
    ) );
?>

<?php if ( $query->have_posts() ) : ?>

<?php while ( $query->have_posts() ) : $query->the_post(); ?>

        <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a>
    <h2><a href="<?php the_permalink(); ?>" title="Перейти"><?php the_title(); ?></a></h2>
    <?php the_excerpt(); ?>
    <?php echo get_the_date(); ?>

<?php endwhile; ?>

<!-- пагинация -->
<div class="pagination">
    <?php
        echo paginate_links( array(
            'base'         => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
            'total'        => $query->max_num_pages,
            'current'      => max( 1, get_query_var( 'paged' ) ),
            'format'       => '?paged=%#%',
            'show_all'     => false,
            'type'         => 'plain',
            'end_size'     => 2,
            'mid_size'     => 1,
            'prev_next'    => true,
            'prev_text'    => sprintf( '<i></i> %1$s', __( 'Назад', 'text-domain' ) ),
            'next_text'    => sprintf( '%1$s <i></i>', __( 'Дальше', 'text-domain' ) ),
            'add_args'     => false,
            'add_fragment' => '',
        ) );
    ?>
</div>

<?php wp_reset_postdata(); ?>
<?php else : ?>
    <p><?php _e( 'К сожалению, ни один из постов не подошел под ваши критерии.' ); ?></p>
<?php endif; ?>
2 комментария
  1. А как сделать пагинацию на странице с выводом пользователmских полей с помощью модуля ACF ?

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *