Проблема с пагинацией WordPress /page/2 возвращает 404 - что делать?

24 нояб. 2015 г., 14:05:24
Просмотры: 100K
Голосов: 22

Я столкнулся с проблемой пагинации /page/2, которая возвращает 404, и пытался найти решение. Я прочитал несколько предложений, но они пока не помогли.

Работает: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/

Не работает: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/page/2/

Я пытаюсь разобраться с этим уже несколько часов. Я понимаю, что WordPress воспринимает "page" как запись из категории "bolos, doces e sobremesas", поскольку моя структура постоянных ссылок настроена как /%category%/%postname%/, но я не знаю, как это исправить.

6
Комментарии

Вы запускаете собственный запрос в шаблоне? Обычно это происходит, когда вы неправильно переопределяете запрос в шаблоне, чтобы изменить posts_per_page или какой-либо другой параметр запроса.

Milo Milo
24 нояб. 2015 г. 19:20:49

Я не помню, чтобы изменял хотя бы одну строку кода. Как я могу это проверить?

Giovanna Coppola Giovanna Coppola
24 нояб. 2015 г. 19:22:10

Если вы не изменяли тему и проблема сохраняется при отключенных плагинах, то вам стоит обратиться к человеку, который создавал тему.

Milo Milo
24 нояб. 2015 г. 19:26:30

Спасибо за уделенное время, Мило. Я просто установил плагин, который решил проблему. Я отвечу на этот вопрос и предоставлю ссылку.

Giovanna Coppola Giovanna Coppola
27 нояб. 2015 г. 21:48:50

Простое изменение параметра пагинации с "paged" на "page" решило проблему в моем случае.

user54002 user54002
17 мар. 2020 г. 15:27:31
Показать остальные 1 комментариев
Все ответы на вопрос 13
8
31

У меня была такая же проблема, и я заметил, что в параметре 'posts_per_page = 6' и в 'Настройки/Чтение' на странице 'options-reading' WordPress у меня было установлено значение 10. Когда я выставил везде одинаковое значение (в моём случае 6), всё снова начало работать.

10 мар. 2018 г. 16:56:03
Комментарии

Спасение @jeferson, спасибо

Ana DEV Ana DEV
28 апр. 2020 г. 09:06:02

@Jeferson Padilha это сработало идеально!!!

Alejo_Blue Alejo_Blue
19 янв. 2021 г. 21:57:10

Где устанавливается posts_per_page?

Keyslinger Keyslinger
3 мар. 2021 г. 07:52:05

Этот пост вдохновил меня, и я нашел причину, почему это происходит. Вы спасли мой день!

Felix H. Felix H.
9 июн. 2022 г. 13:27:48

Это полностью решило проблему для меня. Я до сих пор не понимаю, в чем была проблема. Мой пользовательский 'posts_per_page' установлен на 9.

Kalnode Kalnode
31 окт. 2022 г. 14:43:26

@Keyslinger В пользовательской теме

Kalnode Kalnode
31 окт. 2022 г. 14:43:44

Спасибо, это решило мои проблемы.

Diaz Adhyatma Diaz Adhyatma
28 апр. 2023 г. 14:43:18

Спасибо, вы меня выручили.

S1awek S1awek
18 июл. 2024 г. 17:07:25
Показать остальные 3 комментариев
4
26

В моем случае с пользовательскими ссылками: /%category%/%postname%/ У меня возникла проблема с: /news/page/2/

В итоге мне помог следующий код (добавить в functions.php):

function remove_page_from_query_string($query_string)
{
    // Если имя запроса 'page' и параметр 'page' установлен 
    if ($query_string['name'] == 'page' && isset($query_string['page'])) {
        unset($query_string['name']);
        $query_string['paged'] = $query_string['page'];
    }
    return $query_string;
}
// Добавляем фильтр к хуку 'request'
add_filter('request', 'remove_page_from_query_string');
6 дек. 2018 г. 17:48:44
Комментарии

Спасибо, чувак. Очень помогло.

Shehroz Ahmed Shehroz Ahmed
20 мар. 2021 г. 21:14:38

Блестяще. Сработало как часы. Спасибо!

lStoilov lStoilov
2 сент. 2021 г. 10:50:58

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

Sarah Groß Sarah Groß
22 нояб. 2021 г. 15:43:16

В лучших традициях WordPress, я не знаю, почему это работает, но это работает

MrCarrot MrCarrot
15 июл. 2024 г. 20:13:01
3
16

Пробовал несколько часов, пока не нашел рабочее решение в этой статье.

В ваш файл functions.php добавьте:

/**
 * Исправление пагинации на страницах архивов
 * После добавления правила перезаписи перейдите в Настройки > Постоянные ссылки и нажмите Сохранить, чтобы сбросить кэш правил
 */
function my_pagination_rewrite() {
    add_rewrite_rule('blog/page/?([0-9]{1,})/?$', 'index.php?category_name=blog&paged=$matches[1]', 'top');
}
add_action('init', 'my_pagination_rewrite');

Замените blog на название вашей категории в приведенном выше коде.

После добавления этого кода обязательно перейдите в Настройки > Постоянные ссылки и нажмите Сохранить, чтобы сбросить кэш правил, иначе правило не применится.

Надеюсь, это поможет!

17 июл. 2018 г. 14:11:13
Комментарии

Это сработало для меня. Всё ещё хотелось бы понять, почему это поведение появилось ни с того ни с сего. Но спасибо за решение.

dashard dashard
26 апр. 2019 г. 22:49:21

Спасибо! Почему этот баг всё ещё существует в 2020 году?

skywind skywind
18 дек. 2020 г. 00:40:34

@skywind уже 2024, а он всё ещё здесь лол

khandaniel khandaniel
22 окт. 2024 г. 11:05:12
1

Я обнаружил, что изменение структуры постоянных ссылок сработало для меня, смотрите:

Постоянная ссылка была такой в пользовательской структуре: /index.php/%year%/%monthnum%/%day%/%postname%/

Затем я изменил её на: Дата и название (просто выберите радио-кнопку), и она стала выглядеть так: /%year%/%monthnum%/%day%/%postname%/

Я попробовал это, и это работает!

16 авг. 2017 г. 05:36:11
Комментарии

Я обнаружил, что простая загрузка страницы с постоянной ссылкой устраняет проблему

jerrygarciuh jerrygarciuh
11 мая 2019 г. 00:09:33
0

Мое решение состоит из 3 шагов:

1- первый шаг: Установка этого плагина: https://wordpress.org/plugins/category-pagination-fix/

2- затем: приведите ваш код к следующей структуре

<?php $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; ?>
        <?php

        $q=new wp_Query(
            array(
                 "posts_per_page"=>10, // постов на страницу
                 "post_type"=>"", // тип записи
                 "meta_key"=>"", // ключ мета-поля
                 "orderby"=>"meta_value_num", // сортировка по числовому значению мета-поля
                 "order"=>"asc", // по возрастанию
                 "paged" => $paged, // номер текущей страницы

            )
        );
 while($q->have_posts())

        {
            $q->the_post();    
            ?>
<li></li>
 <?php
        }
        wp_reset_postdata();

        ?>





<div class="pagination">
<?php
global $q;
$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' => $q->max_num_pages
) );
?>
</div>

3- перейдите в настройки WordPress > чтение > количество записей на странице блога и введите число 1

19 янв. 2019 г. 12:50:41
0

Как уже упоминали другие, убедитесь, что ваш параметр 'posts_per_page = 6' равен или меньше настройки WordPress: Настройки > Чтение > На страницах блога отображать не более.

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

Например: у меня установлено 9 постов на страницу, но всего 25 постов. Первая и вторая страницы работали, а третья выдавала 404. Я изменил настройку WordPress на 1, оставив в файле шаблона 9, и теперь всё работает как ожидалось.

31 янв. 2019 г. 23:14:45
0

В моем случае, при использовании Divi и плагина PageNavi, причина ошибки 404 заключалась в том, что шаблон страницы (в моем случае архив) получал параметр запроса paged с помощью get_query_var( 'paged' ). Вместо этого все, что мне нужно было сделать — использовать глобальную переменную, как показано ниже:

<?php
/*
Template Name: Архивы
*/
get_header(); ?>

<?php

    // $paged - глобальная переменная, предоставляемая темой
    global $paged;

    $args = array(
        'posts_per_page' => 4, 
        'post_type' => 'axis',
        'paged' => $paged,
    );

    $myposts = new WP_Query($args);
?>

<div div style="width: 50%; margin: 0 auto;">

    <?php while ( $myposts->have_posts() ) : $myposts->the_post(); ?>

            <div class="media-body">
                <?php the_content(); ?>
            </div>


    <?php endwhile; wp_reset_postdata(); ?>

    <?php wp_pagenavi( array( 'query' => $myposts ) ); ?>

</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Этот код исправил ссылки и решил проблему с форматом записей post-name/page/N. Настройка постоянных ссылок установлена на "Название записи", т.е. http://localhost/sample-post/

20 июл. 2019 г. 21:45:48
0

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

if (is_category()) $args['posts_per_page'] = 8;

А в Настройки->Чтение у меня было установлено 10 записей на страницу для блога и ленты.

Я изменил на 8 записей на страницу в Настройки->Чтение, и теперь ошибка 404 исчезла, и всё, кажется, работает.

Я не знаю, почему так произошло, но, возможно, это кому-то поможет в будущем.

18 мар. 2020 г. 00:24:40
0

Вот обобщённое решение на основе ответа kregus, которое исправляет пагинацию сразу для всех категорий:

/**
 * Исправление пагинации на страницах архивов
 */
function my_pagination_rewrite() {
    $categories = '(' . implode('|', array_map(function($category){return $category->slug;}, get_categories())) . ')';
    add_rewrite_rule($categories . '/page/?([0-9]{1,})/?$', 'index.php?category_name=$matches[1]&paged=$matches[2]', 'top');
}
add_action('init', 'my_pagination_rewrite');
22 авг. 2020 г. 07:10:49
0

Для тех, кто использует WooCommerce: я искал то же самое и выяснил, что WooCommerce изменяет параметр posts_per_page для категорий товаров. Подробнее: https://woocommerce.com/document/change-number-of-products-displayed-per-page/

Используя фильтр WooCommerce:

/**
 * Изменение количества товаров, отображаемых на странице (страница магазина)
 */
add_filter( 'loop_shop_per_page', 'wc_update_loop_shop_per_page', 20 );

function wc_update_loop_shop_per_page( $cols ) {
  // $cols содержит текущее количество товаров на странице, основанное на значении из Настройки → Чтение
  // Возвращаем желаемое количество товаров на странице.
  $cols = 9;
  return $cols;
}

В моем случае я изменил $cols на 12, и тогда пагинация снова заработала корректно.

20 апр. 2023 г. 16:53:50
0

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

Например, постоянная ссылка моей страницы блога была 'articles', и я также установил 'Базу категорий' (в Настройки > Постоянные ссылки) в значение 'articles'. Изменение 'Базы категорий' на что-то другое исправило ошибки 404.

19 мая 2023 г. 16:18:05
1
-1

Я получаю ошибку 404, когда перехожу по URL с /page/2/.... Поэтому я зашел на страницу 404 в WordPress и добавил этот JavaScript в начало страницы с ошибкой:

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
   var getreurl = window.location.href;
   if(getreurl != ""){
     var res = getreurl.split("/?");
       if(res[1] != ""){
         var resd = "http://www.yourwebsite.com/list/?"+res[1];
         window.location = resd;
     }
 }
 </script>

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

19 янв. 2017 г. 09:28:24
Комментарии

JS-решение всё равно будет возвращать 404 для Google/Facebook и т.д. Нет причин не запускать такой код на стороне PHP

Mark Kaplun Mark Kaplun
19 янв. 2017 г. 09:43:18
2
-3

Решение найдено!

Установка этого плагина решила проблему: https://wordpress.org/plugins/category-pagination-fix/

Также мне пришлось внести изменения в Настройки > Чтение, чтобы отображать менее 10 записей на странице (сейчас я показываю 6 записей, но любое значение меньше 10 должно работать).

Надеюсь, это поможет и вам. :)

27 нояб. 2015 г. 21:53:35
Комментарии

устаревший плагин, исправляющий конкретную проблему в WordPress, которая была исправлена в ядре 6 лет назад? вряд ли это хороший ответ

Mark Kaplun Mark Kaplun
20 авг. 2017 г. 08:03:07

Плагин изначально казался мне неприемлемым вариантом, но вы направили меня в правильном направлении с изменением настроек! Спасибо!

daneczech daneczech
21 мар. 2018 г. 18:21:35