Страница категории 2 URL не существует.

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

У меня есть страница категории, содержащая 6 стандартных постов (не кастомных постов), но я хочу отображать 5 на странице 1 и оставшийся пост на странице 2.

Я выполняю этот запрос

  $args = [
    "numberposts" => -1,
    "posts_per_page" => 5,
    "cat" => $cat_id,
    "post_status" => "publish",
    "paged" => get_query_var("paged", 1),
  ];
  $posts = new WP_Query($args);
  if ($posts->have_posts()):

затем выполняю пагинацию с помощью


$big = 99999999;
paginate_links([
      "total" => $posts->max_num_pages,
      "current" => max(1, get_query_var("paged")),
      "type" => "list",
      "base" => str_replace($big, "%#%", get_pagenum_link($big)),
    ]);

Пока что все хорошо. Страница отображает 5 постов, и ниже у меня отображается пагинация.

URL для страницы 2 — https://staging5.designslikethese.co.uk/category/graphic-design-tips/page/2/, что я и ожидал, однако при нажатии на ссылку ‘Next’ в отображении пагинации я получаю 404.

Точно есть 6 постов, потому что если я установлю posts_per_page => 6, я получаю 6 постов на странице категории.

Я не могу понять, почему page/2/ дает 404, если это не URL второй страницы.

Я пересмотрел много постов о пагинации, но не вижу, что не так. На самом деле, кажется, что сама пагинация работает корректно.

Кто-нибудь может пролить свет на это?

Спасибо

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

Конечно, проблема, с которой вы столкнулись при реализации пагинации на категории страницы с использованием WordPress, довольно распространённая, и её решение требует понимания внутренней работы системы WordPress и PHP. Давайте разберёмся с каждым элементом вашего кода и определим возможные причины возникновения проблемы 404 при попытке перехода на вторую страницу.

Теория

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

  1. Ошибки в настройке параметров WP_Query: Ваш код использует класс WP_Query для получения постов и включения пагинации. Однако, несмотря на правильные настройки аргументов, важно учитывать, что функции орегулирования URL, такие как get_query_var, могут давать неверные значения или быть неверно интерпретированы, если параметры ссылки или правил перезаписи установлен не корректно.

  2. Правила перезаписи (Rewrite Rules): В WordPress ссылки определяются с использованием правил перезаписи. Если они настроены неверно или устарели, это может привести к ошибкам 404. Часто эта проблема решается перезагрузкой правил перезаписи через панель администратора, переходом в "Настройки" → "Постоянные ссылки" и просто сохранением настроек.

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

Пример

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

$args = array(
    'cat' => $cat_id,
    'posts_per_page' => 5,
    'paged' => max(1, get_query_var('paged')),
    'post_status' => 'publish'
);

$query = new WP_Query($args);

if ($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post();
        // вывод поста
    endwhile;

    $big = 999999999; // уникальное число для замены
    echo paginate_links(array(
        'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
        'format' => '?paged=%#%',
        'current' => max(1, get_query_var('paged')),
        'total' => $query->max_num_pages,
    ));
endif;
wp_reset_postdata();

Применение

На практике, для решения проблемы необходимо выполнить следующие шаги:

  1. Пересоздание правил перезаписи: Зайдите в панель администратора вашего сайта и обновите настройки "Постоянные ссылки". Это обновит правила перезаписи и, возможно, решит проблему 404 ошибки.

  2. Проверка и очистка кэша: Убедитесь в отсутствии кэша, который может препятствовать правильной работе пагинации. Если у вас используется плагин кэширования, временно отключите его или очистите кэш. Также проверьте уровень серверного кэширования.

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

  4. Проверка корректности URL и работоспособности ссылки. Убедитесь, что вы не редактировали файл .htaccess, который мог бы вносить изменения в правила перезаписи. Посмотрите, нет ли у плагинов иных возможностей для конфликта с текущими настройками URL.

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

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

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