tripcollor
@tripcollor

Как заставить работать пагинацию при вы воводе статей с WP_Query()?

При выводе статей при помощи функции WP_Query(), отказывается работать паганация echo get_the_posts_pagination();, на страницу она выводится, но при клике на какую либо страницу ничего не происходит. Вернее страница перезагружается и типа показывается что мы на той стр на которую кликнули но по сути все статьи остаются с первой страницы.
Пробовал выводить данную функцию паганации при использовании обычного цикла вывода записей все норм отрабатывает.
Нужно чтобы пагинация заработала на WP_Query(). Как это лечить?
  • Вопрос задан
  • 763 просмотра
Пригласить эксперта
Ответы на вопрос 2
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>';
		 }
	}
}
Ответ написан
Palych_tw
@Palych_tw
Типа веб-разработчик
Встроенные функции пагинации работают только с базовым циклом WP или с кастомным, но если вы вы его положите в глобальную переменную wp_query
$args = [];
global $wp_query;
$wp_query = new WP_Query($args);

В этом случае после цикла делаем wp_reset_query вместо wp_reset_postdata. Так же можно воспользоваться плагином WP_PageNavi .. в его функцию можно передавать кастомный query .. или же написать пагинацию вручную через paginate_links https://wp-kama.ru/function/paginate_links вся остальная пагинация в WP работает именно на основе этой функции. Как в ответе выше
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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