Для wordpress существует великое множество плагинов, которые выводят постраничную навигацию. Её необходимость ни у кого не вызывает сомнения: повышение юзабилити, облегчение доступа для поисковых пауков ко всем статьям блога, повышение заработка в sape, в конце концов. Но не все знают, что эти плагины (Wp-PageNavi, WP SEO Pager и др.) созданы далеко не оптимально: подгружают дополнительные стили CSS, часто создают ненужные запросы в базу данных. Да и в силу того, что эти плагины имеют разнообразные настройки – они содержат много лишнего кода, который неблагоприятно сказывается на скорости загрузки.
А ведь в wordpress постраничную навигацию можно реализовать полностью за счет внутренних функций, т.е. зачем изобретать колесо?
Давайте по порядку. Если у вас уже установлен один из таких плагинов – ищем в шаблоне (в файлах index.php, single.php и archive.php) код, вроде этого:
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
либо, если у вас навигация по постам выглядит так:
<< Предыдущая запись Следующая запись >>
то этот код в вашем шаблоне будет выглядеть так:
<div class="alignleft"><?php next_posts_link('Older') ?></div>
<div class="alignright"><?php previous_posts_link('Newer') ?></div>
и вместо него вставляем вот этот код:
<?php
global $wp_query;
$max_page = $wp_query->max_num_pages;
$nump=10;
if($max_page!=1){
$paged = intval(get_query_var('paged'));
if(empty($paged) || $paged == 0) $paged = 1;
echo '<div class="pagenavi">';
if($paged!=1) echo '<a href="'.get_pagenum_link(1).'">Первая</a> ';
else echo '<span class="current">Первая</span> ';
if($paged-$nump>1) $start=$paged-$nump; else $start=2;
if($paged+$nump<$max_page) $end=$paged+$nump; else $end=$max_page-1;
if($start>2) echo "... ";
for ($i=$start;$i<=$end;$i++)
{
if($paged!=$i) echo '<a href="'.get_pagenum_link($i).'">'.$i.'</a> ';
else echo '<span class="current">'.$i.'</span> ';
}
if($end<$max_page-1) echo "... ";
if($paged!=$max_page) echo '<a href="'.get_pagenum_link($max_page).'">Последняя</a>';
else echo '<span class="current">Последняя</span> ';
echo '</div>' ;
}
?>
Если в вашем шаблоне постраничной навигации вообще нет, то этот код нужно вставить между строками:
<?php endwhile; ?>
и
<?php endif; ?>
Теперь навигация отображается, осталось настроить её внешний вид.
Указываем в style.php стили для следующих элементов:
.pagenavi {} – стиль для контейнера
<div class="pagenavi">
в который заключен весь код навигации.
span.current {} – стиль текущей страницы.
Готово! Тот же эффект, но реализация гораздо проще.
Можно считать эту статью небольшим дополнением к Юзабилити в wordpress. Часть 2 – навигация и Как я уменьшил время загрузки своего блога в 4 раза.
Сергей aka SergeySL написал отличный пост о том, как установить текстовый счетчик подписчиков FeedBurner и фолловеров Twitter. Как это выглядит вы можете посмотреть на блоге Сергея, либо на моём.
Еще один способ разместить блок подписки на своём блоге – в виде информера. Такой плагин создал Blogovod, но его блог на данный момент почему-то недоступен. Прочесть пост об этом плагине можно здесь. Мне реализация очень понравилась.



Меня зовут Ян Такушевич и я рад приветствовать Вас на моём блоге. Мне 22 года, живу я в городе Минске. Чтобы связаться со мной, посетите страницу
Подписка по RSS
E-mail подписка
Я в twitter

Комментарии:
хотел подписаться на рсс а он пишет:
Ошибка синтаксического анализа XML: объявление XML или текста не в начале сущности
Адрес: http://feeds.feedburner.com/webstyle
Строка 2, символ 1:
исправь пожалуйста
Ответить
Ян Такушевич отвечает:
18 января 2010 в 12:02
Исправил, подписывайтесь. Большое спасибо, что не поленились написать об ошибке, так бы я и не узнал о её существовании
Ответить
Добрый день! Спасибо за код! Слетел плагин с пейджером (seo pager). С плагином не стал разбираться и внял вашим советам по более корректной работе с пейджингом. Код работает прекрасно, считает правильно (в отличие от плагина) – не учитывает статьи, которые не выводятся в ленту.
Ответить