Задать вопрос

Как использовать the_posts_pagination() на странице category.php?

Добрый день!
Решил переделать себе тему на сайте, делаю пагинацию. Попробовал функцию the_posts_pagination() - работает только первая страница в формате: site.ru/novosti если перехожу на вторую (становится адрес site.ru/novosti/page/2 ), то выдает 404 ошибку.
В админке настройки постоянных ссылок у меня выставлены в /%category%/%postname%/

Возможно кто то сталкивался с подобной проблемой, как её можно решить? Спасибо!

<?php
    if ( have_posts() ) :
      // Start the loop.
      while ( have_posts() ) : the_post();
       
        the_content("далее...");


      // End the loop.
      endwhile;

      // Previous/next page navigation.
      the_posts_pagination( array(
        'show_all'     => False, // показаны все страницы участвующие в пагинации
        'end_size'     => 1,     // количество страниц на концах
        'mid_size'     => 1,     // количество страниц вокруг текущей
        'prev_next'    => True,  // выводить ли боковые ссылки "предыдущая/следующая страница".
        'prev_text'    => __('« Предыдущая'),
        'next_text'    => __('Следующая »'),
        'add_args'     => False,
        'add_fragment' => '',     // Текст который добавиться ко всем ссылкам.
        'screen_reader_text' => __( 'Навигация по записям' ),
      ) );

		else :
			echo "<p>Нет записей</p>";
    endif;

    ?>
  • Вопрос задан
  • 4729 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
AmateR
@AmateR Автор вопроса
Решил добавлением в function.php следующего кода:
function site_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', 'site_request');

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


Данная проблема возникает, когда постоянные ссылки настроены на подобие этого:
/%category%/%postname%/

В итоге когда будете перемещаться по ссылкам Wordpress отправляет на страницу site.ru/novosti/page/2 что начинает конфликтовать с пользовательскими настройками.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@cluberr
Вот рабочее решение, добавьте в файл функций и не парьтесь
function wp_corenavi() {
  global $wp_query;
  $pages = '';
  $max = $wp_query->max_num_pages;
  if (!$current = get_query_var('paged')) $current = 1;
  $a['base'] = str_replace(999999999, '%#%', get_pagenum_link(999999999));
  $a['total'] = $max;
  $a['current'] = $current;

  $total = 1; //1 - выводить текст "Страница N из N", 0 - не выводить
  $a['mid_size'] = 3; //сколько ссылок показывать слева и справа от текущей
  $a['end_size'] = 1; //сколько ссылок показывать в начале и в конце
  $a['prev_text'] = '&laquo;'; //текст ссылки "Предыдущая страница"
  $a['next_text'] = '&raquo;'; //текст ссылки "Следующая страница"

  if ($max > 1) echo '<div class="navigation">';
  if ($total == 1 && $max > 1) $pages = ''."\r\n";
  echo $pages . paginate_links($a);
  if ($max > 1) echo '</div>';
}


вывод в шаблоне через <?php wp_pagenavi(); ?>
работает если записей > 10
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы