Поддержка Проблемы и решения Ошибка wp_pagenavi при использовании showposts

  • Добрый день. Попал на ошибку работы wp_pagenavi при использовании ограничения количества постов.
    Использую плагин Wp Pagenavi (Список страниц) и штатную настройку «На страницах блога отображать не более» 10 постов. На всех страницах всё ок,
    wp_pagenavi выводит правильное количество статей, правильное количечство страниц и позволяет переходить по ним.
    Проблема только на одной странице (с отдельным шаблоном), там мне необходимо использовать ограничение на вывод только 3-х постов на страницу. Когда я использую query_posts($query_string.’&showposts=5′); я вывожу список страниц, используя <?php wp_pagenavi(); ?> до query_posts и после query_posts и вот здесь вылезает косяк.
    Первый <?php wp_pagenavi(); ?> выводит кнопки для 3-х страниц, вероятно он считает количество постов 29, делит их на 10 (системная настройка чтения) и получает 3 страницы, а вот <?php wp_pagenavi(); ?> который выводится после query_posts и уже знает, что будет только 3 поста на странице, выводит кнопки для 10 страниц (29/3 записи), но вот главная проблема — нажимаются только 3 страницы, 4-я выбрасывает на error404.
    Попробовал очень многие штуки и ничего не вышло, чувствую, что надо как-то глобально перехватить этот его расчёт о количестве страниц доступных, но как не соображу. Помогите, пожалуйста!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Когда я использую query_posts($query_string.’&showposts=5′);

    Вместо query_posts() используйте действие pre_get_posts (пример).

    Подробности: «Почему не следует использовать query_posts()».

    Спасибо большое! Очень интересно было почитать, вообще, WP стал очень запутанным и саму философию понять очень сложно. Вот и тут было ощущение, что надо где-то раньше перехватить глобально значение, а найти справку не получалось.
    Прочитав всё, я пришёл к такому решению — добавить в function.php хук:

    function my_pre_get_posts( $query ) {
    	if ( is_category( 'monografie' ) && $query->is_main_query() ) {
    		$query->set( 'posts_per_page', 3 );
    		return;
    	}
    }
    add_action( 'pre_get_posts', 'my_pre_get_posts' );

    is_category( ‘monografie’ ) использую, чтобы отразилось только на странице category-monografie.php, мне кажется, что всё верно… да, всё работает. Спасибо!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Ошибка wp_pagenavi при использовании showposts» закрыта для новых ответов.