Как добавить пагинацию в цикл foreach для страниц

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

Я создаю страницу в WordPress series.php, и вот код, где я застрял!

    <?php 
        $categories=get_categories(
            array( 'parent' => $cat->cat_ID)
        );

        foreach ($categories as $c) {
            // то, что вы на самом деле хотите вместо var_dump, это что-то для
            // создания разметки-- возможно, элементы списка. Например
            $idp = $c->term_taxonomy_id;
            // затем я получаю данные из базы данных
            $cat_data = get_option("category_".$idp);
        ?>      

        <div class="wide-box">
            <!-- Блок с деталями контента -->
            <a href="https://wordpress.stackexchange.com/questions/241244/<?php echo get_category_link( $idp ); ?>" class="wb-image"><img src="<?php echo $cat_data['original_img']; ?>"></a>
            <!-- Центр Wb -->
            <div class="wb-center">
                <h3 class="wb-name"><a href="https://wordpress.stackexchange.com/questions/241244/<?php echo get_category_link( $idp ); ?>"><?php echo $c->name; ?></a></h3>
                <div class="wb-details">
                    Жанры : <?php echo $cat_data['genres']; ?><br>
                    Страна : <?php echo $cat_data['country']; ?><br>
                    Язык : <?php echo $cat_data['language']; ?><br>
                    Год : <?php echo $cat_data['year']; ?>
                </div>
                <div class="latest-label">Последний эпизод:</div>
                <?php
                    $catquery = new WP_Query( 'cat=".$idp."&posts_per_page=1' );
                    while($catquery->have_posts()) : $catquery->the_post();
                ?>
                    <a href="<?php the_permalink() ?>" class="latest-ep"><?php the_title(); ?></a>
                <?php endwhile; ?>
            </div>
            <!-- Центр Wb -->
        </div>      

    <?php                   
        }
    ?>
    </div>

Итак, как добавить постраничную навигацию для цикла, чтобы показать её?

Добавьте этот аргумент в ваш WP_Query.

'paged' => get_query_var( 'paged' ),

И используйте массив в качестве стиля аргументов, а не стиль запроса постов.

Вы можете использовать функцию paginate_links() вместе с параметром paged в вашем запросе.

<?php 
    $categories=get_categories(
        array( 'parent' => $cat->cat_ID)
    );

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Получаем текущую страницу или устанавливаем 1, если не установлено

    foreach ($categories as $c) {
        // то, что вы на самом деле хотите вместо var_dump, это что-то для
        // создания разметки-- возможно, элементы списка. Например
        $idp = $c->term_taxonomy_id;
        // затем я получаю данные из базы данных
        $cat_data = get_option("category_".$idp);
    ?>      

    <div class="wide-box">
        <!-- Блок с деталями контента -->
        <a href="<?php echo get_category_link( $idp ); ?>" class="wb-image"><img src="<?php echo $cat_data['original_img']; ?>"></a>
        <!-- Центр Wb -->
        <div class="wb-center">
            <h3 class="wb-name"><a href="<?php echo get_category_link( $idp ); ?>"><?php echo $c->name; ?></a></h3>
            <div class="wb-details">
                Жанры : <?php echo $cat_data['genres']; ?><br>
                Страна : <?php echo $cat_data['country']; ?><br>
                Язык : <?php echo $cat_data['language']; ?><br>
                Год : <?php echo $cat_data['year']; ?>
            </div>
            <div class="latest-label">Последний эпизод:</div>
            <?php
                $category_query = new WP_Query( array(
                    'cat' => $idp,
                    'posts_per_page' => 1,
                    'paged' => $paged
                ) );
                while($category_query->have_posts()) : $category_query->the_post();
            ?>
                <a href="<?php the_permalink() ?>" class="latest-ep"><?php the_title(); ?></a>
            <?php endwhile; ?>
        </div>
        <!-- Центр Wb -->
    </div>      

<?php                   
    }
    
    // Пагинация
    echo paginate_links( array(
        'total' => $category_query->max_num_pages
    ) );
?>
</div>

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

Как добавить пагинацию к циклу foreach в WordPress

Добавление пагинации к циклу foreach в WordPress может показаться сложной задачей, однако с правильным подходом и использованием встроенных функций это можно сделать довольно просто. В этом ответе будет описан процесс добавления пагинации к вашему коду, основанный на данных, получаемых через WP_Query.

Шаг 1: Подготовка данных

Первым делом необходимо определить текущую страницу. Для этого используем функцию get_query_var('paged'). Если страница не установлена, присваиваем значение 1.

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Шаг 2: Обновление запроса

Затем нужно адаптировать ваш запрос, чтобы он учитывал параметр paged. Вы можете это сделать следующим образом. Обновим ваш цикл для получения категорий:

$categories = get_categories(array('parent' => $cat->cat_ID));

foreach ($categories as $c) {
    $idp = $c->term_taxonomy_id;
    $cat_data = get_option("category_" . $idp);

    // Далее ваш код...
}

Шаг 3: Запрос публикаций с пагинацией

Теперь давайте обновим ваш запрос WP_Query, добавив параметр paged. Мы также изменим стиль передачи параметров на ассоциативный массив для ясности:

$category_query = new WP_Query(array(
    'cat' => $idp,
    'posts_per_page' => 1,
    'paged' => $paged
));

Шаг 4: Отображение данных и меток пагинации

Теперь мы можем перейти к выводу данных и добавлению нумерации страниц с использованием функции paginate_links(). После завершения цикла while, добавляем следующий код для отображения пагинации:

while ($category_query->have_posts()) : $category_query->the_post();
    // Ваш код для отображения постов
endwhile;

// Пагинация
echo paginate_links(array(
    'total' => $category_query->max_num_pages
));

Полный пример кода

Объединив все части, ваш код может выглядеть так:

<?php 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$categories = get_categories(array('parent' => $cat->cat_ID));

foreach ($categories as $c) {
    $idp = $c->term_taxonomy_id;
    $cat_data = get_option("category_" . $idp); ?>

    <div class="wide-box">
        <a href="<?php echo get_category_link($idp); ?>" class="wb-image"><img src="<?php echo $cat_data['original_img']; ?>"></a>
        <div class="wb-center">
            <h3 class="wb-name"><a href="<?php echo get_category_link($idp); ?>"><?php echo $c->name; ?></a></h3>
            <div class="wb-details">
                Genres: <?php echo $cat_data['genres']; ?><br>
                Country: <?php echo $cat_data['country']; ?><br>
                Language: <?php echo $cat_data['language']; ?><br>
                Year: <?php echo $cat_data['year']; ?>
            </div>
            <div class="latest-label">Latest Episode:</div>
            <?php
            $category_query = new WP_Query(array(
                'cat' => $idp,
                'posts_per_page' => 1,
                'paged' => $paged
            ));
            while ($category_query->have_posts()) : $category_query->the_post(); ?>
                <a href="<?php the_permalink(); ?>" class="latest-ep"><?php the_title(); ?></a>
            <?php endwhile; ?>
        </div>
    </div>

<?php 
}

// Пагинация
echo paginate_links(array('total' => $category_query->max_num_pages));
?>

Заключение

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

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

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