T
T
tripcollor2017-05-04 16:09:33
CMS
tripcollor, 2017-05-04 16:09:33

How to make pagination work when you enter articles with WP_Query()?

When displaying articles using the WP_Query () function, paganization refuses to work echo get_the_posts_pagination();, it is displayed on the page, but nothing happens when you click on any page. Rather, the page reloads and it shows that we are on the page we clicked on, but in fact all the articles remain from the first page.
I tried to display this paganization function when using the normal record output cycle, it works out all the rules.
You need pagination to work on WP_Query(). How to treat it?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Alex Kyznetsov, 2017-05-04
@360157

if (!function_exists('pagination')) { // если ф-я уже есть в дочерней теме - нам не надо её определять
  function pagination() { // функция вывода пагинации
    global $wp_query; // текущая выборка должна быть глобальной
    $big = 999999999; // число для замены
    $links = paginate_links(array( // вывод пагинации с опциями ниже
      'base' => str_replace($big,'%#%',esc_url(get_pagenum_link($big))), // что заменяем в формате ниже
      'format' => '?paged=%#%', // формат, %#% будет заменено
      'current' => max(1, get_query_var('paged')), // текущая страница, 1, если $_GET['page'] не определено
      'type' => 'array', // нам надо получить массив
      'prev_text'    => 'Назад', // текст назад
      	'next_text'    => 'Вперед', // текст вперед
      'total' => $wp_query->max_num_pages, // общие кол-во страниц в пагинации
      'show_all'     => false, // не показывать ссылки на все страницы, иначе end_size и mid_size будут проигнорированны
      'end_size'     => 15, //  сколько страниц показать в начале и конце списка (12 ... 4 ... 89)
      'mid_size'     => 15, // сколько страниц показать вокруг текущей страницы (... 123 5 678 ...).
      'add_args'     => false, // массив GET параметров для добавления в ссылку страницы
      'add_fragment' => '',	// строка для добавления в конец ссылки на страницу
      'before_page_number' => '', // строка перед цифрой
      'after_page_number' => '' // строка после цифры
    ));
   	if( is_array( $links ) ) { // если пагинация есть
        echo '<ul class="pagination">';
        foreach ( $links as $link ) {
        	if ( strpos( $link, 'current' ) !== false ) echo "<li class='active'>$link</li>"; // если это активная страница
            else echo "<li>$link</li>"; 
        }
       	echo '</ul>';
     }
  }
}

P
Pavel, 2017-05-04
@Palych_tw

The built-in pagination functions only work with the core WP loop or with a custom one, but if you put it in the wp_query global variable

$args = [];
global $wp_query;
$wp_query = new WP_Query($args);

In this case, after the loop, we do wp_reset_query instead of wp_reset_postdata. You can also use the WP_PageNavi plugin .. you can pass a custom query to its function .. or write pagination manually using paginate_links https://wp-kama.ru/function/paginate_links all other pagination in WP works on the basis of this function. As in the answer above

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question