Исправление ошибки 404 при пагинации

Исправление ошибки 404 при пагинации

pagination_cluve.ruИсправление ошибки 404 при переходе на следующую страницу

Столкнулся с проблемой, при переходе на следующую страницу на сайте возникает ошибка 404, при этом в адресной строке высвечивается, что переход произошёл
your_site.ru/page/2
На сайте стоит плагин WP-PageNavi, все манипуляции проделывал при рабочем плагине. Как обычно - интернет в помощь, начал искать способы устранения проблемы. Решений достаточно много, но далеко не все подошли, здесь приведу все способы, которые запомнил. ( Отключите кэширование на сайте тогда результаты будут появляться сразу и обязательно сделайте Backup)

Способ 1

Самый простой.
Заходим в админ панель сайта, переходим : настройки - постоянные ссылки
И ничего не меняя просто жмём - Сохранить изменения
Кому-то может и помогло, мне нет ( даже не надеялся так просто всё исправить )

Способ 2

Файл .htaccess
Он находится на сервере в корневой папке. При возникновении ошибки, этот файл может быть поврежден, неправильно сконфигурирован или удален. Создаём новый базовый файл .htaccess ( Родной архивируем, переименовываем или просто скачиваем на компьютер, но ни в коем случае не удаляем )

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Проверяем как работает пагинация, если не помогло, возвращаем всё на место, как было, удаляем базовый. Тоже не помогло.

Способ 3

Если пагинация делается по принципу:

<?php
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('showposts=6&post_type=tours'.'&paged='.$paged);
$i = 1;
while ($wp_query->have_posts()) : $wp_query->the_post();
?>

тут вывод данных в шаблоне

<?php
endwhile;
previous_posts_link('← НОВЫЕ ПОСТЫ')
next_posts_link('СТАРЫЕ ПОСТЫ →')
$wp_query = null;
$wp_query = $temp;
?>

А в настройках вордпреса в разделе "Настройки" -"Чтение" - "На страницах блога отображать не более" стоит значение больше или меньше того, которое выделено красным цветом, то будет ошибка 404, по этому, либо просто ставьте такое же значение, либо убирайте из запроса параметр showposts, таким образом запрос для правильной работы и вытаскивания системных настроек пагинации должен быть вот таким :

$wp_query->query('post_type=tours'.'&paged='.$paged);

Данный способ не пробовал.
Источник:  backnet.ru/2018/02/07/wordpress-oshibka-404-pri-paginatsii-v-polzovatelskom-tipe-dannyih/

Способ 4

Удаляем часть URL из-за которого происходит ошибка, прежде чем WordPress пытается обработать запрашиваемый адрес. Для этого добавим следующий код в файл functions.php:

function codernote_request($query_string ) {
if ( isset( $query_string['page'] ) ) {
if ( ''!=$query_string['page'] ) {
if ( isset( $query_string['name'] ) ) {
unset( $query_string['name'] ); }
}
}
return $query_string;
}
add_filter('request', 'codernote_request');

Затем реализуем механизм получения номера запрашиваемой страницы из URL и добавим его в запрос WordPress в требуемом формате. Опять же в файл functions.php добавим код:

add_action('pre_get_posts', 'codernote_pre_get_posts');
function codernote_pre_get_posts( $query ) {
if ( $query->is_main_query() && !$query->is_feed() && !is_admin() ) {
$query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) );
}
}

Источник:  codernote.ru/wordpress/404-oshibka-the_posts_pagination/
Вот в данном случае вроде всё заработало, на главной странице пагинация осуществляется, но перестала работать в рубриках, вот так рано обрадовался, причем заметил случайно. Убрал второй код, рубрики заработали, на главной странице ошибка 404 не высвечивается хотя и номально не работает, всё время остаётся на первой странице, причём в адресной строке прописывается как положено your_site.ru/page/2 ( оставил как временную меру пока не решил проблему )

Способ 5

Тоже не сложный, но достаточно нудный.
Заключается в выяснении конфликтов между плагинами. Заходим в админ панель и поочерёдно деактивируем плагины, отключили - проверили и так каждый. Если дело в этом, пробуем менять плагин на аналогичный или заменой его кодом ( от большинства плагинов можно избавиться прописав тот или иной код в файловом менеджере, тут надо уже искать в интернете ) Также пробуем менять тему.

Способ 6

Вот этот способ мне наконец-то помог.
Здесь пропишу два кода, первый от источника:
overcoder.net/q/112753/wordpress-categoryphp-pagination-404-ошибки
Второй исправленный, дело в том, что вписав изначальный код у меня вообще всё сбилось, не знаю в чём дело, может тема такая, может автор что-то пропустил, поэтому пишу оба. В файл functions.php самый верх (может и не обязательно вверху, не экспериментировал) после <?php прописываем:

Изначальный код:

function custom_pre_get_posts( $query ) {
if( $query->is_main_query() && !$query->is_feed() && !is_admin() is_category()) {
$query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) ); } }

add_action('pre_get_posts','custom_pre_get_posts');

function custom_request($query_string ) {
if( isset( $query_string['page'] ) ) {
if( ''!=$query_string['page'] ) {
if( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; }

add_filter('request', 'custom_request');

Исправленный код:

//Исправление ошибки пагинации

function custom_pre_get_posts( $query ) {
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && !is_category()) {
$query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) ); } }

add_action('pre_get_posts','custom_pre_get_posts');

function custom_request($query_string ) {
if( isset( $query_string['page'] ) ) {
if( ''!=$query_string['page'] ) {
if( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; }

add_filter('request', 'custom_request');
//Конец исправления

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

Читайте также:

Аноним в

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

Ваш адрес email не будет опубликован.