Как добавить пагинацию на пользовательскую страницу

Вопрос или проблема

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

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    query_posts( 
        array (
            'posts_per_page' => 2,
            'post_type' => 'post', 
            'category_name' => 'news', 
            'category' => 1,
            'paged' => $paged )
    );      
    // Цикл
    while ( have_posts() ) : the_post();?>
        <div class="news-page-content-wrapper">
            <div class="news-page-content">
                <h1><a class="read-more"href="https://wordpress.stackexchange.com/questions/257135/<?php the_permalink(); ?>"><?php the_title();?></a></h1>
                <figure><?php the_post_thumbnail(); ?></figure>
                <p><?php echo get_the_excerpt();?></p>
                <a href="https://wordpress.stackexchange.com/questions/257135/<?php the_permalink(); ?>">Читать далее&raquo</a>
            </div>
         </div>  
    <?endwhile; 
    // Сбросить запрос
    wp_reset_query();
  ?>
  <?php next_posts_link(); ?>
  <?php previous_posts_link(); ?>

Как я могу сделать пагинацию, используя цикл с ID категории?

Вы можете следовать по следующему URL, чтобы найти ваше решение

Как исправить пагинацию для пользовательских циклов?

Вы можете использовать фильтр tax_query: например, так

    $args = array
    (
        'post_type' => 'item',
        'nopaging' => true,
        'tax_query' => array
        (
           'taxonomy' => $taxonomy,
           'field' => 'term_taxonomy_id',
           'terms' => $term_id
        ),
        'meta_query'  => array(
           'key'     => 'from_import',  
           'value'   => '1'
        )
    );
    $posts = query_posts( $args );

Ответ или решение

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

Вот обновленный код с комментариями:

<?php
// Получаем текущую страницу для пагинации
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

// Определяем аргументы для WP_Query
$args = array(
    'posts_per_page' => 2, // Количество постов на странице
    'post_type' => 'post', // Тип поста
    'category_name' => 'news', // Обозначаем категорию
    'paged' => $paged // Передаем текущую страницу
);

// Создаем новый экземпляр WP_Query
$query = new WP_Query($args); 

// Проверяем, есть ли посты
if ($query->have_posts()) : 
    // Цикл вывода постов
    while ($query->have_posts()) : $query->the_post(); ?>
        <div class="news-page-content-wrapper">
            <div class="news-page-content">
                <h1><a class="read-more" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
                <figure><?php the_post_thumbnail(); ?></figure>
                <p><?php echo get_the_excerpt(); ?></p>
                <a href="<?php the_permalink(); ?>">Читать далее &raquo;</a>
            </div>
        </div>
    <?php endwhile; ?>

    // Пагинация
    ?>
    <div class="pagination">
        <?php
        // Показать ссылки на следующую и предыдущую страницы
        previous_posts_link('« Назад');
        next_posts_link('Вперед »', $query->max_num_pages);
        ?>
    </div>
    <?php
else :
    // Если посты не найдены, выводим сообщение
    echo '<p>Посты не найдены.</p>';
endif;

// Сбрасываем данные поста
wp_reset_postdata();
?>

Объяснение ключевых моментов:

  1. Создание WP_Query: Использование new WP_Query($args); вместо query_posts(). Это позволяет более гибко управлять запросом и избегать конфликтов с глобальной переменной $wp_query.

  2. Цикл: Цикл стандартный, но с небольшой модификацией, чтобы использовать новый объект запроса.

  3. Пагинация: Используются функции previous_posts_link() и next_posts_link(). При этом для следующей ссылки необходимо передать общее количество страниц, полученное через $query->max_num_pages.

  4. Сброс данных поста: wp_reset_postdata(); нужен, чтобы сбросить глобальные переменные после выполнения цикла.

Этот код должен корректно работать на вашей кастомной странице, предоставляя нужную пагинацию для постов в категории ‘news’. Если у вас возникнут дополнительные вопросы или потребуется помощь в доработке, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...