Жизнь это - мгновения, промежутки. Ночь ушла, солнце скоро взойдет. Сделайте эти промежутки настолько прекрасными насколько это возможно - наполненными молчанием, наполненными благодарностью к существованию, которое дало вам шанс, благодарностью по отношению ко всем тем, кто вам помог. И ждите.


29 мая 2011 г.

Удобная постраничная навигация в WordPress

Постраничная навигация в WordPress без плагина (альтернатива WP-PageNavi)

20 мая 2011 г.
Практически любой блоггер, который ведет свой блог на движке WordPress, знаком с плагином WP-PageNavi, который выводит постраничную навигацию такого вида:
Постраничная навигация в WordPress без плагина
Но не каждый знает (включая меня до недавнего времени), что WordPress имеет встроенную функцию (начиная аж с версии 2.1), которая реализует практически тот же самый функционал. Т.е. необходимость в использовании плагина отпадает.
Некоторое время я пользовался другим аналогичным решением, за что большое спасибо его автору Тимуру.
Функция, которую я вам предлагаю, совсем небольшая по размеру:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function wp_corenavi() {
  global $wp_query, $wp_rewrite;
  $pages = '';
  $max = $wp_query->max_num_pages;
  if (!$current = get_query_var('paged')) $current = 1;
  $a['base'] = ($wp_rewrite->using_permalinks()) ? user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' ) : @add_query_arg('paged','%#%');
  if( !empty($wp_query->query_vars['s']) ) $a['add_args'] = array( 's' => get_query_var( 's' ) );
  $a['total'] = $max;
  $a['current'] = $current;

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

  if ($max > 1) echo '';
}
Данный код необходимо поместить в файл functions.php вашего шаблона. В функции всего пять опций, они отделены разрывами строк. Комментарии я написал, думаю, тут все понятно.
Для того, чтобы вывести навигацию в нужном месте, вставляйте в шаблон следующий код:
1
if (function_exists('wp_corenavi')) wp_corenavi(); ?>
HTML-код, который получается в результате вывода функции, выглядит следующим образом:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="navigation">
  <span class="pages">Страница 7 из 27</span>
  <a class='prev page-numbers' href='http://wordpress31/page/6/'>« Предыдущая</a>
  <a class='page-numbers' href='http://wordpress31/page/1/'>1</a>
  <span class='page-numbers dots'>...</span>
  <a class='page-numbers' href='http://wordpress31/page/4/'>4</a>
  <a class='page-numbers' href='http://wordpress31/page/5/'>5</a>
  <a class='page-numbers' href='http://wordpress31/page/6/'>6</a>
  <span class='page-numbers current'>7</span>
  <a class='page-numbers' href='http://wordpress31/page/8/'>8</a>
  <a class='page-numbers' href='http://wordpress31/page/9/'>9</a>
  <a class='page-numbers' href='http://wordpress31/page/10/'>10</a>
  <span class='page-numbers dots'>...</span>
  <a class='page-numbers' href='http://wordpress31/page/27/'>27</a>
  <a class='next page-numbers' href='http://wordpress31/page/8/'>Следующая »</a>
</div>
Как видите, присутствуют все необходимые CSS-классы, которые можно использовать для оформления любого элемента навигации (например, текущую страницу, ссылки на предыдущую и следующую страницы).
Проверял данную функцию на версиях 2.3.3 и 3.1, а также тестировал варианты с включенным и отключенным ЧПУ. Все работает, как и полагается.
Пользуйтесь.

Комментариев нет:

Отправить комментарий