WordPress как на ладони
wordpress jino

Альтернатива плагину WP-pagenavi (пагинация для WordPress)

C версии 4.1 в WordPress появилась родная аналогичная функция: the_posts_pagination()

Попалась мне как-то тема, что популярнейший  плагин WordPress wp-pagenavi нагружает сервер не в меру своей надобности. Проанализировав его код выяснил, что это всего лишь миф, хотя его все же можно немного оптимизировать, собственно этому и посвящен пост.

Если другие плагины сложно представить без возможности их настройки в админ-панели, то wp-pagenavi мне представляется легко. Достаточно один раз настроить навигацию и забыть про нее. И наверное есть те, кто думает так же? Поэтому я решил отказаться от wp-pagenavi и заменить его на свою функцию. Функцию я написал, предварительно изучив код wp-pagenavi, частично код был взят от туда. Все CSS классы wp-pagenavi сохранены и, как следствие, заменить wp-pagenavi на мой вариант совсем не составит труда.

Для замены нужно скопировать нижеследующую функцию в файл шаблона functions.php. Также, нужно скопировать CSS стили wp-pagenavi в ваш файл стилей (обычно это style.css). Перенос стилей носит и полезный характер, потому что больше не будет необходимости подключать файл стилей, а это минус один http запрос.

/**
 * Альтернатива wp_pagenavi. Создает ссылки пагинации на страницах архивов.
 *
 * @param string $before   - текст до навигации
 * @param string $after    - текст после навигации
 * @param bool   $echo     - возвращать или выводить результат
 * @param array  $args     - аргументы функции
 * @param array  $wp_query - объект WP_Query на основе которого строится пагинация. По умолчанию глобальная переменная $wp_query
 *
 * Версия: 2.5.1
 * Автор: Тимур Камаев
 * Ссылка на страницу функции: http://wp-kama.ru/?p=8
 */
function kama_pagenavi( $before = '', $after = '', $echo = true, $args = array(), $wp_query = null ) {
	if( ! $wp_query ){
		wp_reset_query();
		global $wp_query;
	}

	// параметры по умолчанию
	$default_args = array(
		'text_num_page'   => '', // Текст перед пагинацией. {current} - текущая; {last} - последняя (пр. 'Страница {current} из {last}' получим: "Страница 4 из 60" )
		'num_pages'       => 10, // сколько ссылок показывать
		'step_link'       => 10, // ссылки с шагом (значение - число, размер шага (пр. 1,2,3...10,20,30). Ставим 0, если такие ссылки не нужны.
		'dotright_text'   => '…', // промежуточный текст "до".
		'dotright_text2'  => '…', // промежуточный текст "после".
		'back_text'       => '« назад', // текст "перейти на предыдущую страницу". Ставим 0, если эта ссылка не нужна.
		'next_text'       => 'вперед »', // текст "перейти на следующую страницу". Ставим 0, если эта ссылка не нужна.
		'first_page_text' => '« к началу', // текст "к первой странице". Ставим 0, если вместо текста нужно показать номер страницы.
		'last_page_text'  => 'в конец »', // текст "к последней странице". Ставим 0, если вместо текста нужно показать номер страницы.
	);

	$default_args = apply_filters('kama_pagenavi_args', $default_args ); // чтобы можно было установить свои значения по умолчанию

	$args = array_merge( $default_args, $args );

	extract( $args );

	$posts_per_page = (int) $wp_query->get('posts_per_page');
	$paged          = (int) $wp_query->get('paged');
	$max_page       = $wp_query->max_num_pages;

	//проверка на надобность в навигации
	if( $max_page <= 1 )
		return false;

	if( empty( $paged ) || $paged == 0 )
		$paged = 1;

	$pages_to_show = intval( $num_pages );
	$pages_to_show_minus_1 = $pages_to_show-1;

	$half_page_start = floor( $pages_to_show_minus_1/2 ); //сколько ссылок до текущей страницы
	$half_page_end = ceil( $pages_to_show_minus_1/2 ); //сколько ссылок после текущей страницы

	$start_page = $paged - $half_page_start; //первая страница
	$end_page = $paged + $half_page_end; //последняя страница (условно)

	if( $start_page <= 0 )
		$start_page = 1;
	if( ($end_page - $start_page) != $pages_to_show_minus_1 )
		$end_page = $start_page + $pages_to_show_minus_1;
	if( $end_page > $max_page ) {
		$start_page = $max_page - $pages_to_show_minus_1;
		$end_page = (int) $max_page;
	}

	if( $start_page <= 0 )
		$start_page = 1;

	//выводим навигацию
	$out = '';

	// создаем базу чтобы вызвать get_pagenum_link один раз
	$link_base = str_replace( 99999999, '___', get_pagenum_link( 99999999 ) );
	$first_url = get_pagenum_link( 1 );
	if( false === strpos( $first_url, '?') )
		$first_url = user_trailingslashit( $first_url );

	$out .= $before . "<div class='wp-pagenavi'>\n";

		if( $text_num_page ){
			$text_num_page = preg_replace( '!{current}|{last}!', '%s', $text_num_page );
			$out.= sprintf( "<span class='pages'>$text_num_page</span> ", $paged, $max_page );
		}
		// назад
		if ( $back_text && $paged != 1 )
			$out .= '<a class="prev" href="'. ( ($paged-1)==1 ? $first_url : str_replace( '___', ($paged-1), $link_base ) ) .'">'. $back_text .'</a> ';
		// в начало
		if ( $start_page >= 2 && $pages_to_show < $max_page ) {
			$out.= '<a class="first" href="'. $first_url .'">'. ( $first_page_text ? $first_page_text : 1 ) .'</a> ';
			if( $dotright_text && $start_page != 2 ) $out .= '<span class="extend">'. $dotright_text .'</span> ';
		}
		// пагинация
		for( $i = $start_page; $i <= $end_page; $i++ ) {
			if( $i == $paged )
				$out .= '<span class="current">'.$i.'</span> ';
			elseif( $i == 1 )
				$out .= '<a href="'. $first_url .'">1</a> ';
			else
				$out .= '<a href="'. str_replace( '___', $i, $link_base ) .'">'. $i .'</a> ';
		}

		//ссылки с шагом
		$dd = 0;
		if ( $step_link && $end_page < $max_page ){
			for( $i = $end_page+1; $i<=$max_page; $i++ ) {
				if( $i % $step_link == 0 && $i !== $num_pages ) {
					if ( ++$dd == 1 )
						$out.= '<span class="extend">'. $dotright_text2 .'</span> ';
					$out.= '<a href="'. str_replace( '___', $i, $link_base ) .'">'. $i .'</a> ';
				}
			}
		}
		// в конец
		if ( $end_page < $max_page ) {
			if( $dotright_text && $end_page != ($max_page-1) )
				$out.= '<span class="extend">'. $dotright_text2 .'</span> ';
			$out.= '<a class="last" href="'. str_replace( '___', $max_page, $link_base ) .'">'. ( $last_page_text ? $last_page_text : $max_page ) .'</a> ';
		}
		// вперед
		if ( $next_text && $paged != $end_page )
			$out.= '<a class="next" href="'. str_replace( '___', ($paged+1), $link_base ) .'">'. $next_text .'</a> ';

	$out .= "</div>". $after ."\n";

	$out = apply_filters('kama_pagenavi', $out );

	if( $echo )
		return print $out;

	return $out;
}
/**
 * 2.5 - 2.5.1 - автоматический сброс основного запроса.
 */

Настройки описаны прямо в коде и они идентичны настройкам wp-pagenavi, с той лишь разницей, что вместо текста "к последней странице" можно вывести номер последней страницы.

После того, как функция установлена и css стили перенесены, меняем в шаблоне код wp_pagenavi на этот:

<?php kama_pagenavi(); ?>

Если у вас в коде что-то вроде этого, то нужно поменять все wp_pagenavi на kama_pagenavi:

if(function_exists('wp_pagenavi')) {
	wp_pagenavi( '<center>', '</center>' );
}

CSS стили для кода

Выше я уже сказал. что классы CSS совпадают с wp-pagenavi. Для удобства выкладываю тут все CSS правила:

.wp-pagenavi{ margin:2em auto; text-align:center; }
.wp-pagenavi > *{ display:inline-block; padding:.0em .5em; margin:.1em; border:1px solid #93a8bc; border-radius:3px; color:#465366; }
.wp-pagenavi a,
	.wp-pagenavi a:hover{ text-decoration:none; }
.wp-pagenavi a{ background-color: #FFFFFF; }
.wp-pagenavi a:hover{ border-color:#7d95ac; }
.wp-pagenavi .pages{ }
.wp-pagenavi .current{ border-color:#465366; color: #465366; }
.wp-pagenavi .extend{ color: #465366; }
.wp-pagenavi .first{  }
.wp-pagenavi .last{  }
.wp-pagenavi .prev{ border-color:rgba(0,0,0,0); }
.wp-pagenavi .next{ border-color:rgba(0,0,0,0); }

В моем коде присутствуют 4 новых класса: first (в начало), last (в конец), prev (назад), next (вперед).

Неплохую подборку стилей можно взять здесь.

Если навигация выводится 2 раза

Так же, хочу обратить внимание тех, у кого навигация выводится 2 раза на странице (сверху и снизу цикла). Чтобы 2 раза не выполнять одни и те же операции по составлению навигации, логичнее сделать так: один раз собрать навигацию (использовать функцию), затем записать результат в переменную и второй раз просто вывести эту переменную. Выглядит это так:

// место, где первый раз нужно вывести навигацию
// получаем навигацию и записываем её в переменную
$navigation = kama_pagenavi('', '', false);
// выводим переменную на экран
echo $navigation; 

		/* Здесь идет вывод постов - цикл Loop */

// место, где второй раз нужно вывести навигацию.
//Так как навигация уже записана в переменную $get_navigation, её можно просто вывести на экран.
echo $navigation;

Обновления

17 декабря 2013
Версия 2.0. Подправил код, убрал лишние, ненужные вызовы функции get_pagenum_link(), за счет чего код стал работать гораздо быстрее, без потери качества.

11 мая 2010
Перенес ссылки назад/вперед, теперь так:
«назад «**к началу ... 11 12 13 14 15 16 17 18 ... в конец**» вперед»

Последний вариант функции наверху.

2 мая 2010

  1. Добавлены ссылки назад/вперед, пример:
    «**к началу «назад ... 11 12 13 14 15 16 17 18 ... вперед» в конец**»
    Их можно отключить (см. настройки).

  2. Убран баг такого типа:
    1 ... 2 3 4 5 6 7 8 ... 50 или 1 ... 21 22 23 24 25 26 27 28 ... 29
    То есть, где не нужно убраны тексты "до" и "после" навигации (в данном примере это троеточие).

Реверсивная пагинация для WordPress

Идея реверсивной (обратной) пагинации принадлежит sholo, который высказал её на известном нам форуме - mywordpress.ru. Мне стало интересно посмотреть, как это будет выглядеть и я немного переделал код.

Этот код основан на старой версии основного кода...

/* Альтернатива wp_pagenavi - реверсивная пагинация
--------------------------------------------------------------------------------- */
function kama_pagenavi($before='', $after='', $echo=true) {
	/* ================ Настройки ================ */
	$text_num_page = ''; // Текст для количества страниц. {current} заменится текущей, а {last} последней. Пример: 'Страница {current} из {last}' = Страница 4 из 60
	$num_pages = 10; // сколько ссылок показывать
	$stepLink = 10; // после навигации ссылки с определенным шагом (значение = число (какой шаг) или '', если не нужно показывать). Пример: 1,2,3...10,20,30
	$dotright_text = '…'; // промежуточный текст "до".
	$dotright_text2 = '…'; // промежуточный текст "после".
	$backtext = '<<<'; // текст "перейти на предыдущую страницу". Ставим '', если эта ссылка не нужна.
	$nexttext = '>>>'; // текст "перейти на следующую страницу". Ставим '', если эта ссылка не нужна.
	$first_page_text = '« последняя'; // текст "к первой странице" или ставим '', если вместо текста нужно показать номер страницы.
	$last_page_text = 'первая »'; // текст "к последней странице" или пишем '', если вместо текста нужно показать номер страницы.
	/* ================ Конец Настроек ================ */ 

	global $wp_query;
	$posts_per_page = (int) $wp_query->query_vars['posts_per_page'];
	$paged = (int) $wp_query->query_vars['paged'];
	$max_page = $wp_query->max_num_pages;

	if($max_page <= 1 ) return false; //проверка на надобность в навигации

	if(empty($paged) || $paged == 0) $paged = 1;

	$pages_to_show = intval($num_pages);
	$pages_to_show_minus_1 = $pages_to_show-1;

	$half_page_start = floor($pages_to_show_minus_1/2); //сколько ссылок до текущей страницы
	$half_page_end = ceil($pages_to_show_minus_1/2); //сколько ссылок после текущей страницы

	$start_page = $paged - $half_page_start; //первая страница
	$end_page = $paged + $half_page_end; //последняя страница (условно)

	if($start_page <= 0) $start_page = 1;
	if(($end_page - $start_page) != $pages_to_show_minus_1) $end_page = $start_page + $pages_to_show_minus_1;
	if($end_page > $max_page) {
		$start_page = $max_page - $pages_to_show_minus_1;
		$end_page = (int) $max_page;
	}

	if($start_page <= 0) $start_page = 1;

	$out='';//выводим навигацию
		$out.= $before."<div class='wp-pagenavi'>\n";
				if ($text_num_page){
					$text_num_page = preg_replace ('!{current}|{last}!','%s',$text_num_page);
					$out.= sprintf ("<span class='pages'>$text_num_page</span>",$paged,$max_page);
				}

				if ($backtext && $paged!=1) $out.= '<a href="'.get_pagenum_link(($paged-1)).'">'.$backtext.'</a>';

				if ($start_page >= 2 && $pages_to_show < $max_page) {
					$out.= '<a href="'.get_pagenum_link().'">'. ($first_page_text?$first_page_text:$max_page) .'</a>';
					if($dotright_text && $start_page!=2) $out.= '<span class="extend">'.$dotright_text.'</span>';
				}

				for($i = $start_page; $i <= $end_page; $i++) {
					if($i == $paged) {
						$out.= '<span class="current">'.($max_page-$i+1).'</span>';
					} else {

						$out.= '<a href="'.get_pagenum_link($i).'">'.($max_page-$i+1).'</a>';
					}
				}

				//ссылки с шагом
				if ($stepLink && $end_page < $max_page){
					for($i=$end_page+1; $i<=$max_page; $i++) {
						if($i % $stepLink == 0 && $i!==$num_pages) {
							if (++$dd == 1) $out.= '<span class="extend">'.$dotright_text2.'</span>';
							$out.= '<a href="'.get_pagenum_link($i).'">'.($max_page-$i+1).'</a>';
						}
					}
				}

				if ($end_page < $max_page) {
					if($dotright_text && $end_page!=($max_page-1)) $out.= '<span class="extend">'.$dotright_text2.'</span>';
					$out.= '<a href="'.get_pagenum_link($max_page).'">'. ($last_page_text?$last_page_text:1) .'</a>';
				}

				if ($nexttext && $paged!=$end_page) $out.= '<a href="'.get_pagenum_link(($paged+1)).'">'.$nexttext.'</a>';

		$out.= "</div>".$after."\n";
	if ($echo) echo $out;
	else return $out;
}
Альтернатива плагину WP-pagenavi (пагинация для WordPress) 228 комментариев
Полезные 7 Вопросы 1 Все
  • Роман

    Здравствуйте, кто может помочь, проблема в пагинации, page/1/ , page/2/ и т.д.
    какую бы цыфру в конце не поставиш все ровно открывается страница, в чем может быть проблема ?

    Ответитьгод назад #
    • Kama4662

      Скорее всего где-то использовался query_posts() и не был сброшен запрос через wp_reset_query(), поэтому глоб. переменная испорчена, а на её базе работает этот код...

      Обновил код до версии 2,5 попробуй его...

      Елси не поможет ищи решине тут: Проблема с пагинацией

      Ответитьгод назад #
  • Владимир cайт: korvet2.ru

    Здравствуйте Тимур!
    Помогите, пожалуйста, в решении следующей проблемы.
    У меня в поиске Гугла (site:адрес блога) среди прочих страниц выдается 16 страниц пагинации, а 13 отсутствуют. Поясните, пожалуйста, как должно быть. Если должны быть все, то где искать проблему отсутствующих?
    Если должна быть только главная (а это первая страница пагинации), то, как удалить остальные?
    Спасибо.

    • Kama4662

      Вопрос к сеошникам... Я без понятия. Я вообще считаю, что в Гугле не должно быть ни одной страницы пагинации, ибо они - бестолковый-мусор... На этом сайте и на всех своих я их закрывают в robots.txt. Они нужны только для навигации и пользы как контент никакой не имеют, тогда зачем они в поиске? unknw

  • Тимур, а как быть с пагинацией, если есть функция "Загрузить еще" на ajax?
    Посты подгружаются, но пагинация не меняется.
    Знаю сайты, где пагинается меняется, т.е. это возможно.
    Использую такой код для загрузки еще:

    ....
    	$args = unserialize(stripslashes($_POST['query']));
    	$args['paged'] = $_POST['page'] + 1; // следующая страница
    	$args['post_status'] = 'publish';
    	$q = new WP_Query($args);
    	if( $q->have_posts() ):
    		while($q->have_posts()): $q->the_post();
    			?>
    			.....
    			<?php
    		endwhile;
    	endif;
    	wp_reset_postdata();
    	die();
    } 
    add_action('wp_ajax_loadmore', 'load_posts');
    add_action('wp_ajax_nopriv_loadmore', 'load_posts');
    
    • Михаил

      Также интересует как сделать синхронизацию кодов

    • Антон

      Походу никто не может внятно объяснить данное решение. То же видел что при нажатии [Загрузить еще] меняется страницы. Видимо какие то тайные решения )

      Ответить2 месяца назад #
      • Kama4662

        Не тайны, а всегда частный случай, нужно конкретный пример смотреть и дописывать...

        Ответитьмесяц назад #
    • Kama4662

      В JS скрипте нужно удалять загруженные страницы... Или при обработке скрипта, подгружать HTML код пагинации и возвращать его, и заменять весь HTML код пагинации. Конкретным кодом не подскажу.

      Ответитьмесяц назад #
  • Alex

    После обновления версии php до 5.4 перестала работать на страницах категорий. Подскажите, в чем может быть проблема ? В дальней шем планируется переход на php 7.0

    Спасибо.

    Ответить2 месяца назад #
    • Kama4662

      Смотри какие ошибки код показывает PHP. У меня и на 7 и на 7.1 все работает нормально...

      Ответить2 месяца назад #
      • Alex

        Ошибок не выводит. Просто возвращает 404 страницу ((( Уже всю голову сломал.

        А как можно проверить еще ?

        Ответить2 месяца назад #
        • Kama4662

          Где то в коде неправильно используется query_posts видимо...

          Ответить2 месяца назад #
          • Alex

            Разобрался со своей проблемой. Всему виной было удаление /category/ в урлах. А как можно подружить пагинацию с этим хуком ? scratch_one-s_head

            Ответить2 месяца назад #
            • Kama4662

              Для удаления category лучше используй плагин специальный! Тогда все норм работать будет. А еще лучше - не удаляй этот префикс...

              Ответить2 месяца назад #
      • Подтверждаю, проблема присутствует, но если количество выводимых постов запроса ровно количеству выводимых постов в настройках чтения, то все работает, а так 404.

        Использую таксономии.

        Ответить2 месяца назад #
        • Проблема решается хуком pre_get_posts

          Ответить2 месяца назад #
          • Alex

            можно более подробнее про лечение ? Ничего не понял (((

            Ответить2 месяца назад #
            • add_action('pre_get_posts', function ( $query ) {
              		$get_queried_object = get_queried_object();
              
              		if ( $get_queried_object->taxonomy == 'fifty_cent' )
              				$query->set( 'posts_per_page', 24 );
              }, 1 );

              Вставлять в functions.php, тут главное сделать проверку страницы, на которой ты находишься, а после задать количество.

              Но, возможно, у вас проблема не в этом. После обновления php что-нибудь слетать не должно.

              Ответить2 месяца назад #
              • Alex

                Это конечно глупый вопрос, но я правда не знаю ответа на него. Вставлять надо в саму функцию или в любое место ? И как правильно задать количество, чтобы постоянно не возвращаться к его редактированию ?

                Пытался по разному, но все равно возвращается 404 ошибка ((( В чем может быть проблема ? Заметил именно после смены версии php. До этого открывалось все. Помогите пожалуйста люди добрые решить проблему help

                Подключил для теста вывод пагинации через функцию the_posts_pagination(), все равно возвращает 404 ошибку. Помогите пожалуйста отловить баг.

                1
                Ответить2 месяца назад #
              • Alex

                Нашел следующее решение:

                function codernote_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', 'codernote_request');
                
                add_action('pre_get_posts', 'codernote_pre_get_posts');
                function codernote_pre_get_posts( $query ) {
                  if ( $query->is_main_query() && !$query->is_feed() && !is_admin() ) {
                	$query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) );
                  }
                }

                Источник: codernote.ru/wordpress/404-oshibka-the_posts_pagination/

                В категориях заработала, но сломалась пагинация на главной. Урл страницы меняется, а контент нет (((

                1
                Ответить2 месяца назад #
  • Алексей

    Можете подсказать, как подправить эту функцию, чтобы можно было выводить не первую и последнюю страницу, а несколько - например две в начале и конце:

    < 1 2 ... 10 11 12 ... 94 95 >

    1
    Ответить2 месяца назад #
    • campusboy1946 cайт: www.youtube.com/c/wpplus @

      Привет. Может стоит попробовать встроенную в движок функцию the_posts_pagination()? На сколько помнится, она так умеет.

      Ответить2 месяца назад #
      • Алексей

        Дело как раз в том, что встроенная пагинация у меня работает некорректно на главной странице, поэтому и пришлось искать альтернативу

        Ответить2 месяца назад #
        • campusboy1946 cайт: www.youtube.com/c/wpplus @

          Если она не работает корректно, значит в основной запрос что-то вмешивается. Может стоит разобраться в причинах?

          Ответить2 месяца назад #
          • Алексей

            Разобраться в причинах не получилось, поэтому и пришлось обратиться к этому варианту пагинации

            Ответить2 месяца назад #
            • Kama4662

              Код нужно доработать для этого. За оплату могу доделать, если интересно в контакты напиши...

              Ответитьмесяц назад #
  • toorr2p cайт: podvoh.tv/tag/podvodnaya-oxota-video-201...

    Добавил вашу функцию в function.php шаблона темы, пробую ее использовать в tag.php который выводит список постов по тегу.

    Но почему то вообще не отображается навигация! При чем функция вызывается!

    делал print_r($wp_query) в ее начале.

    Как понять в чем может быть дело?

    Стандартная навигация также не отображает ничего!

    В файле tag.php вот такое:

    <?php get_header(); ?>
    
    <?php 
    	global $wp_query;
    
    	$tag_id = get_query_var('tag_id'); 
    	$term = &get_tag( $tag_id );
    
    	//debug($term);
    	//die();
    ?>
    
    <div class="container-fluid browse-page browse-page-tag"><!-- START content-block (end from footer.php) -->
    
    	<div class="row">
    		<div class="col-lg-12">
    			<article>
    				<h1><?php echo mb_ucfirst(single_tag_title()); ?></h1>
    				<div class="plusone"><div class="g-plusone" data-size="small" data-annotation="inline" data-width="300"></div></div>
    				<p class="clr"></p>
    				<br/>
    			</article>
    		</div>
    	</div>
    
    	<!-- Widjet List top banner -->
    	<?php /*if(is_active_sidebar('list-top')): ?>
    	<div class="row">
    		<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
    				<?php dynamic_sidebar('list-top'); ?>
    		</div> 
    	</div>
    	<?php endif;*/ ?>
    	<!-- END Widjet List top banner -->
    
    	<?php if($term): ?>
    
    		<?php 
    			$args = array(
    				'post_type' => array('video', 'post'),
    				'tax_query' => array(
    					array(
    						'taxonomy' => 'post_tag',
    						'field' => 'slug',
    						'terms' => $term->slug
    					)
    				),
    				'order' => 'DESC',
    
    				//order by date publish in youtube
    				//'orderby'   => 'meta_value_num',
    				//'meta_key'  => 'DaydatePublished',
    				//'meta_key'  => 'MonthdatePublished',
    				//'meta_key'  => 'YeardatePublished',
    
    				//'orderby'  => array( 'meta_value_num' => 'ASC'),
    				//'meta_key'  => 'YeardatePublished',
    
    				'post_status' => 'publish',
    				'posts_per_page' => 20,
    				'paged' => get_query_var('paged')
    			);
    
    			//$wp_query = query_posts($args);
    			$wp_query = new WP_Query($args); 
    		?>
    
    		<div class="row">
    			<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
    
    				<?php //the_content(); ?>
    				<?php get_template_part( 'content', 'tag' ); ?>
    			<?php endwhile; ?>
    		</div>
    
    		<div class="row">
    			<div class="col-lg-12">
    				<div class="tag_description">
    					<?=tag_description($tag_id);?>
    				</div>
    			</div>
    		</div>
    
    		<div class="row">
    			<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
    
    				<?php //wp_reset_query(); ?>
    				<?php //if (function_exists('wp_corenavi')) wp_corenavi();  ?>
    
    				<?php echo kama_pagenavi(); ?>
    				<?
    
    				if(function_exists('wp_pagenavi')) {
    					wp_pagenavi( '<center>', '</center>' );
    				}
    
    				?>
    
    			</div>
    		</div>
    
    	<?php endif; ?>
    
    	<!-- Widjet Video Bottom -->
    	<?php if(is_active_sidebar('video-bottom')): ?>
    		<?php dynamic_sidebar('video-bottom'); ?>
    	<?php endif; ?>
    	<!-- END Widjet Video Bottom -->
    
    <?php get_footer(); ?>
    1
    Ответить2 месяца назад #
    • Kama4662

      Может нет страниц для отображения?

      Ответитьмесяц назад #
      • toorr2p cайт: podvoh.tv/tag/podvodnaya-oxota-video-201...

        Страницы есть, там постов много по данным тегам, они рассчитываются верно. Но почему то вот так... ((((

        Ответитьмесяц назад #
        • Kama4662

          Ты основной запрос переделываешь, притом на самой странице. Используй для этого хук pre_get_posts... Очень странный код, не понял вообще что хотел сделать автор... Что нужно то? На странице тега и так выводиться список постов по этому тегу, зачем весь этот огород?

          Ответитьмесяц назад #
          • toorr2p cайт: podvoh.tv/tag/podvodnaya-oxota-video-201...

            Добавил в обработчик в functions.php

            add_action( 'pre_get_posts', 'action_function_query' );
            function action_function_query( $query ) {
            	if($query->is_tag){
            		$query->set( 'post_type', array('video', 'post') );
            		$query->set( 'order', 'DESC' );
            		$query->set( 'post_status', 'publish' );
            		$query->set( 'posts_per_page', 20 );
            	}
            }

            И заработало со стандартным кодом tag.php https://podvoh.tv/tag/podvodnaya-oxota-video-2017-novinki/page/3/

            Спасибо вам огромное! Долго не мог решить данную ошибку!

            Ответитьмесяц назад #
  • Александр cайт: invict.ru

    Подскажите как сделать пагинацию по аналогии с сайтом . Пытаюсь выполнить, но не получается. Кнопка "в начало" активна все время! Хотелось бы полную аналогию с приведенным выше сайтом. Заранее спасибо!

    Ответить2 месяца назад #
    • Александр cайт: invict.ru

      Хочется сделать аналогично с coolidea.ru

      Ответить2 месяца назад #

Здравствуйте, !

Ваш комментарий