Пагинация архива пользовательского типа записи с темой HTML5Blank?

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

Не могу заставить пагинацию работать. Вот мой archive-work.php:

<?php get_header(); ?>

    <main role="main">
        <!-- section -->
        <section>

            <h1><?php _e( 'Работа', 'html5blank' ); ?></h1>

            <?php get_template_part('loop', 'work'); ?>

            <?php get_template_part('pagination'); ?>

        </section>
        <!-- /section -->
    </main>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

loop-work.php:

<?php

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

$work = array(
    'post_type' => 'work'
    ,'numberposts' => -1
    ,'posts_per_page' => 2
    ,'paged' => $paged
);

$loop = new WP_Query( $work );

if ($loop->have_posts()): while ($loop->have_posts()) : $loop->the_post(); ?>

    <!-- article -->
    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

        <!-- пост миниатюра -->
        <?php if ( has_post_thumbnail()) : // Проверить, существует ли миниатюра ?>
            <div class="thumbnail">
                <a href="https://wordpress.stackexchange.com/questions/166772/<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                    <?php the_post_thumbnail(array(300,225)); // Укажите нужный размер пикселя внутри массива ?>
                </a>
            </div>
        <?php endif; ?>
        <!-- /пост миниатюра -->

        <header>
            <!-- заголовок поста -->
            <h2 class="title">
                <a href="https://wordpress.stackexchange.com/questions/166772/<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
            </h2>
            <!-- /заголовок поста -->
            <span class="date"><?php the_time('F Y'); ?></span>
        </header>

        <br/><br/>

        <!-- детали поста -->
        <!--span class="author"><?php _e( 'Опубликовано', 'html5blank' ); ?> <?php the_author_posts_link(); ?></span-->
        <!--span class="comments"><?php if (comments_open( get_the_ID() ) ) comments_popup_link( __( 'Оставьте ваше мнение', 'html5blank' ), __( '1 комментарий', 'html5blank' ), __( '% комментариев', 'html5blank' )); ?></span-->
        <!-- /детали поста -->

        <?php html5wp_excerpt('html5wp_index'); // Настройте длину вашего пользовательского колбэка в functions.php ?>

        <?php edit_post_link(); ?>

    </article>
    <!-- /article -->

<?php endwhile; ?>

<?php else: ?>

    <!-- article -->
    <article>
        <h2><?php _e( 'Извините, нечего отображать.', 'html5blank' ); ?></h2>
    </article>
    <!-- /article -->

<?php endif; ?>

Если я установлю страницу по умолчанию на 2, она показывает 3-ю и 4-ю записи… так почему же ссылки не отображаются? Вот как это настроено по умолчанию в архиве/цикле темы.

Для вашего сведения: https://github.com/toddmotto/html5blank

Спасибо.

Большинство пагинаций зависит от глобальной переменной $wp_query. Попробуйте заменить $loop на $wp_query.

И добавьте wp_reset_postdata(); после endwhile.

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

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

1. Проблема с использованием WP_Query

Вы используете $loop = new WP_Query($work);, что создает новый объект запроса. Однако для пагинации лучше работать с глобальным $wp_query. Давайте изменим ваш код так, чтобы использовать глобальный запрос. Ваша функция get_template_part('loop', 'work'); должна выглядеть следующим образом:

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

$args = array(
    'post_type' => 'work',
    'posts_per_page' => 2,
    'paged' => $paged
);

$query = new WP_Query($args);

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

        <!-- article -->
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

            <!-- post thumbnail -->
            <?php if ( has_post_thumbnail() ) : // Check if thumbnail exists ?>
                <div class="thumbnail">
                    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                        <?php the_post_thumbnail(array(300,225)); // Declare pixel size you need inside the array ?>
                    </a>
                </div>
            <?php endif; ?>
            <!-- /post thumbnail -->

            <header>
                <h2 class="title">
                    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
                </h2>
                <span class="date"><?php the_time('F Y'); ?></span>
            </header>

            <br/><br/>

            <?php html5wp_excerpt('html5wp_index'); ?>

            <?php edit_post_link(); ?>

        </article>
        <!-- /article -->

    <?php endwhile; ?>

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

<?php else: ?>

    <!-- article -->
    <article>
        <h2><?php _e( 'Sorry, nothing to display.', 'html5blank' ); ?></h2>
    </article>
    <!-- /article -->

<?php endif; ?>

2. Добавление навигации

Теперь, чтобы добавить навигацию, необходимо убедиться, что вы используете правильный код для отображения пагинации. В вашем pagination.php файл должен содержать следующую логику:

<?php if (function_exists("pagination")) {
    pagination($query->max_num_pages); // Передайте максимальное количество страниц
} ?>

3. Настройка пагинации

Функция pagination() должна быть определена в вашем functions.php, и она должна принимать число страниц, чтобы отображать ссылки на страницы. Вот пример того, как она может выглядеть:

function pagination($pages = '', $range = 2) {
    $showitems = ($range * 2) + 1;

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

    if (1 != $max_page) {
        echo "<div class=\"pagination\"><span>Page " . $paged . " of " . $max_page . "</span>";

        if ($paged > 1)
            echo "<a href='" . get_pagenum_link($paged - 1) . "'>«</a>";

        for ($i = 1; $i <= $max_page; $i++) {
            if (1 != $max_page && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $max_page <= $showitems)) {
                echo ($paged == $i) ? "<span class='current'>" . $i . "</span>" : "<a href='" . get_pagenum_link($i) . "'>" . $i . "</a>";
            }
        }

        if ($paged < $max_page)
            echo "<a href='" . get_pagenum_link($paged + 1) . "'>»</a>";

        echo "</div>";
    }
}

Заключение

После внесения указанных изменений, ваша пагинация должна начать функционировать корректно при переходе между страницами вашего кастомного типа записи "work". Убедитесь, что вы также проверяете настройки ваших постоянных ссылок в админ-панели WordPress, так как иногда неправильная настройка может препятствовать правильной работе пагинации. Успехов в доработке вашего проекта!

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

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