@qwetexac

Как решить проблему с 404 Pagination на Wordpress?

Здравствуйте, суть проблемы такова:

Есть сайт на WP, там есть страница, где выводятся последние новости по 6 штук на страницу. Установлен плагин WP-Pagenavi. На первой странице все ок, все отображается, но при переходе на 2+ страницу (../news/page/2) сервер кидает на 404 страницу. Сама петрушка в том, что я заставил этот шайтан-машину работать прошлой ночью, однако где-то допустил ошибку и теперь не могу решить проблему.

Ниже код цикла на странице
<h1><?php the_title(); ?></h1>//Вывод заголовка страницы
			<?php the_content(); ?>
			<?php
			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
			$id = get_cat_ID( get_the_title() );//Выборка категории идет по заголовку (есть 2 страницы и 2 категории с одинаковым именем и ссылкой)
			$args=array(
				// 'post_type' => $type,
				'post_status' => 'publish',
				'paged' => $paged,
				'posts_per_page' => 6,
				'caller_get_posts'=> 1,
				'cat' => $id
				);
			  $temp = $wp_query;
			  $wp_query = null;
			  $wp_query = new WP_Query();
			  $wp_query->query($args);
			  ?>
			  <?php if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?>

//Тело цикла

?php endwhile; ?>
<?php wp_pagenavi(); ?>//Вывод нумерации страниц
<?php endif; ?>


Предвещая входящие вопросы, дам ответы сразу:
  1. В настройках WP установлено ограничение на 5 записей на страницу (меньше, чем в цикле, все по канону)
  2. Установлен плагин "Category pagination fix" - он решил проблему прошлой ночью, но сейчас уже "не канает"
  3. Прописан код для удаления надписи "category" из адресной строки
add_filter('user_trailingslashit', 'remcat_function');
function remcat_function($link) {
    return str_replace("/category/", "/", $link);
}
  
add_action('init', 'remcat_flush_rules');
function remcat_flush_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
  
add_filter('generate_rewrite_rules', 'remcat_rewrite');
function remcat_rewrite($wp_rewrite) {
    $new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2));
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

Адрес постоянных ссылок следующего вида: %category%/%postname%

Третий день сижу над этой фигней. Помогите, пожалуйста, так никаких нервов не хватит на все это!
  • Вопрос задан
  • 5466 просмотров
Пригласить эксперта
Ответы на вопрос 4
@PorkiBi
Решил проблему так.

$args = array(
....
'posts_per_page' => 6,
....
query_posts($args);

Настройки -> чтение -> На страницах блога отображать не более << 6 >>

Если числа совпадают, то все начинает работает. Не знаю, что за магия. Решено методом тыка...
Ответ написан
Комментировать
Valonix
@Valonix
Back end / Front end developer
Попробуйте передать ваш квери в wp_pagenavi ()
wp_pagenavi( array( 'query' => $my_query ) );
Ответ написан
Комментировать
@alex1nd
мне помогло

https://wordpress.stackexchange.com/questions/2096...

Replace blog with your category name in the code above.

After adding this code, make sure you go to Settings > Permalinks and click Save to flush the rules cache, or else the rule will not be applied.

/**
 * Fix pagination on archive pages
 * After adding a rewrite rule, go to Settings > Permalinks and click Save to flush the rules cache
 */
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');
Ответ написан
Комментировать
@IG-M
Помогло добавление в functions.php:

function remove_page_from_query_string($query_string)
{ 
    if ($query_string['name'] == 'page' && isset($query_string['page'])) {
        unset($query_string['name']);
        $query_string['paged'] = $query_string['page'];
    }      
    return $query_string;
}
add_filter('request', 'remove_page_from_query_string');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы