Дизайн та розробка сайту

Не работает постраничная навигация, пагинация, ошибка 404 на WordPress

404 пагинация

Доброго времени суток. 🙂

Сегодня речь пойдет о проблеме, которая может возникнуть у Вас при работе с WordPress. Данная проблема за частую возникает из за построения пути к записям, то есть через постоянные ссылки.

404 пагинация

Если использовать стандартные виды, то скорее всего, проблем не возникнет, но если Вам нужно сделать специфический путь, то возможно проявление разного рода "глюков". Один из самых распространенных - это 404 ошибка при переходе на вторую страницу. Второй - при переходе на вторую, третью и тд страницу, вы остаетесь на первой.

Все это возникает часто при использовании такого строения постоянных ссылок:

ваш_сайт.com/название_рубрики/название_записи/

Как видите, нет ничего необычного, кроме одного момента - отсутствует слово category. В стандартном пути, WordPress использует category и путь выглядит так:

ваш_сайт.com/category/название_рубрики/название_записи/

Вот как раз из за удаления category из УРЛа иногда и приводит к проблеме с пагинацией. Чаще всего чтобы удалить category, делают как описано в этой статье - Как убрать category из URL адреса WordPress. В настройках прописывают - /%category%/%postname%/, а в "Префикс рубрик" - ставят точку. После этого, category исчезнет из ссылки, но иногда начинаются проблемы с пагинацией.

Мне помогают 2 способа решить данную проблему с пагинацией.

Способ номер 1. Способ простой и заключается в обычной установке плагина Wp-no-category-base Плагин доступен в базе плагинов https://wordpress.org/plugins/wp-no-category-base/. Перед тем как его устанавливать, нужно удалить точку из "Префикса рубрик", если вы ее ставили, как описывает инструкция из прошлой статьи. Чаще всего, данный способ, является основным и должен решить проблему. Если этого не произойдет, можно попробовать еще один вариант.

Способ номер 2. Если Вы прописали настройки постоянным ссылкам и поставили точку в префикс рубрик. Откройте файл пользовательских функций functions.php и в самый конец добавить такой вот код:

Если в конце functions.php , в самой последней строке, есть закрывающий тег PHP - ?> то вставить нужно перед ним.

//Для работы пагинации
function remove_page_from_query_string($query_string)
{ 
    if ($query_string['name'] == 'page' && isset($query_string['page'])) {
        unset($query_string['name']);
        list($delim, $page_index) = split('/', $query_string['page']);
        $query_string['paged'] = $page_index;
    }      
    return $query_string;
}
add_filter('request', 'remove_page_from_query_string');

function fix_category_pagination($qs){
	if(isset($qs['category_name']) && isset($qs['paged'])){
		$qs['post_type'] = get_post_types($args = array(
			'public'   => true,
			'_builtin' => false
		));
		array_push($qs['post_type'],'post');
	}
	return $qs;
}
add_filter('request', 'fix_category_pagination');

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

На этом все, спасибо за внимание. 🙂

Дизайн та розробка сайту

Back to top