Добавить пагинацию на архив пользовательского типа записи

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

Я перенес пользовательские записи, которые обычно находились бы в шаблоне архива, на специальный шаблон страницы. Я следовал этой статье:
https://jasonyingling.me/use-page-custom-post-type-archive-url-rewrites/.

Но я запутался, как мне добавить пагинацию. Если я проверяю код, $paged теперь всегда равен 0. Когда я вызываю код, который у меня есть (<?php pagination(); ?>, ничего не отображается.

function pagination() {
    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,
        ));
    }
}

Какие-нибудь идеи, что я делаю не так?

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

.

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

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

Теория

В общем смысле, пагинация позволяет разбить вывод большого объема данных на страницы. В стандартных условиях WordPress использует встроенные механизмы для работы с архивами записей, где использование переменной $paged и функции paginate_links() позволяют корректно отображать навигацию по страницам.

Проблема возникает, когда мы работаем с кастомными шаблонами, как в вашем случае – заменой шаблона архива произвольного типа записей на специализированный шаблон страницы. При этом важно правильно настроить систему генерации URL и передавать корректные параметры функции WP_Query().

Пример

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

  1. Определение $paged: Если вы используете запрос с пользовательскими параметрами, необходимо явно определить переменную $paged, иначе она может не быть инициализирована автоматически.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
  1. Параметры WP_Query: Убедитесь, что вы передаете параметры для типа кастомного поста и пагинации:
$args = array(
    'post_type' => 'your_custom_post_type',
    'paged' => $paged,
    // другие ваши параметры
);
$query = new WP_Query($args);
  1. Использование в лупе: Настройте ваш шаблон так, чтобы использовать этот новый объект $query, а не глобальный $wp_query, если вы создали свой запрос.
if ($query->have_posts()) :
    while ($query->have_posts()) : $query->the_post();
        // Отображение записи
    endwhile;

    $total_pages = $query->max_num_pages;

    if ($total_pages > 1) {
        echo paginate_links(array(
            'current' => $paged,
            'total'   => $total_pages,
            'base'    => get_pagenum_link(1) . '%_%',
            'format'  => '/page/%#%',
        ));
    }
endif;
wp_reset_postdata();

Приложение

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

  1. Подготовьте ваш шаблон страницы таким образом, чтобы быть уверенным, что он обрабатывает и позволяет параметры пагинации.
  2. Убедитесь, что functions.php или файл с шаблоном страницы не использует неправильные параметры или параметры URL, которые могут конфликтовать с вашей системой пагинации.
  3. Запустите и тестируйте страницу, проверяя, что переменная $paged правильно изменяется при навигации через вашу пагинацию.

Дополнительно это решение можно перерасти в нечто более комплексное с AJAX-пагинацией, если понадобится, чтобы улучшить производительность страницы без обновления страницы целиком.

Таким образом, решая задачу добавления пагинации, необходимо правильно настроить второй запрос в WP_Query с учетом всех нужных условий, что позволит вам добиться ожидаемой работы функционала. Не забудьте протестировать корректное изменение кодов URL, чтобы убедиться, что ваш шаблон страницы обрабатывает переменные пагинации и отображает корректный результат.

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

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