Копаясь не в Кодексе Вордпресса, а напрямую в его файлах, можно найти гораздо больше интересного и местами полезного. Или бесполезного, вроде вспомогательной функции the_weekday()
, которая показывает текущий день недели.
В некоторых темах пригодится, например, get_calendar()
, который, натурально, отображает табличку дат за текущий месяц. Ссылки при этом ведут на конкретные страницы в архиве ВП, что хорошо для больших новостных блогов, с предпочтением навигации по дате.
В этом случае поможет также то, что движок, оказывается, умеет генерить фиды для отдельных категорий get_category_feed_link()
и тегов get_tag_feed_link()
— в качестве аргумента берет id категории/тега. Или get_author_feed_link()
с аргументом $author_id для подписки на RSS конкретного автора, если ведут блог несколько. Вы удивитесь, но есть RSS даже для поиска — get_search_feed_link()
, аргумент — строка поискового запроса.
И все это можно использовать для линка автоматической подписки и кнопки в соответствующих разделах. Ведь часто раздражает, что невозможно подписаться на отдельную интересующую ленту и не получать всего остального мусора.
Функция paginate_navi()
просто выводит циферки со ссылками по определенному формату. Нам же надо заставить ее выводить полноценную пагинацию (кусок вставляется в вывод index.php, tag.php, category.php, archive.php, search.php):
<div id="navigation">
<?php
$paged = intval(get_query_var('paged'));
if(empty($paged) || $paged == 0) $paged = 1;
$plink = get_pagenum_link(777);
$plink = preg_replace("#".get_bloginfo('url')."(.+)777#","\\1%#%",$plink);
echo paginate_links( array(
"base" => get_bloginfo('url')."%_%",
"format" => $plink,
"total" => $wp_query->max_num_pages,
"current" => $paged,
"type" => "plain",
"show_all" => false,
"end_size" => 1,
"mid_size" => 6,
"prev_next" => true,
"prev_text" => "← предыдущие",
"next_text" => "следующие →",
));
?>
</div>
В аргументах она принимает параметры. Можно, конечно, передавать и строкой, но массивом — удобнее.
Первый блок — инициация скрипта, их менять не надо. Мы соответственно, задаем базу (ссылка на сам блог), формат ссылок на страницы (берем из get_pagenumlink
, чтобы не зависеть от выбранного ЧПУ — автоматически будет подставляться ?page=N, /page/N или /page/N/). Это будет работать для любой страницы — что главной, что ленты категорий. Также здесь полное количество страниц и текущая страница — берем их из базы.
Остальные параметры настраиваемые.
type
определяет тип вывода — можно установить как "array"
(возвращается массив), "plain"
(просто ссылки, как нам и надо), или "list"
(списком ul-li).show_all
можно поставить как true
, если надо выводить список всех страниц. С точки зрения удобства, лучше оставить false
.end_size
— количество номеров страниц, выводимых на концах списка. При значении 1 будет показываться только первая и последняя (всегда можно расширить).mid_size
— количество страниц слева и справа от текущей. Неприятность состоит в том, что на 1 странице он выведет только N справа, а на N+1 столько же справа и слева.prev_next
— выводить ли по бокам ссылки «предыдущая-следующая». Вообще, лучше установить параметр в false
, и выводить их с помощью функции posts_nav_link()
над пагинацией, чтобы можно было выделить их большим размером.prev_text
и next_text
определяют текст в ссылках.Скрипт на автомате оборачивает все в ссылки с нужными классами. Код получается примерно такой (оставлены только уникальные строчки):
<div id="navigation">
<span class='page-numbers current'>1</span>
<a class='page-numbers' href='http://localhost/blog/page/2/'>2</a>
<span class='page-numbers dots'>...</span>
<a class='page-numbers' href='http://localhost/blog/page/14/'>14</a>
<a class='next page-numbers' href='http://localhost/blog/page/2/'>следующие →</a>
</div>
Как можно видеть, код довольно избыточный, но зато в CSS настраивается все — определите класс .navigation
для всего блока, .page-numbers
для элементов пагинации, .dots
— для многоточия и .current
для текущей.
Самое простое так (возможно, не хватает font-size
):
#navigation {
display:block;
text-align:center
}
#navigation .page-numbers {
text-decoration:none;
}
#navigation .prev, #navigation .next, #navigation .current {
font-weight:bold;
}
Или как в самом WP PageNavi, с квадратиками и прочим (и, естественно, оптимизированный вариант, а не то говно, простите за мой испанский, что нам подсовывают в самом плагине):
#navigation .page-numbers {
padding: 2px 4px;
margin: 2px;
border: 1px solid #06c;
color: #06c;
background-color: #FFF;
}
#navigation a{
text-decoration: none;
}
#navigation a:hover {
border: 1px solid #000;
color: #000;
}
#navigation .current {
border: 1px solid #000;
font-weight: bold;
color: #000;
}
#navigation .dots {
border: 1px solid #999;
color: #999;
}
Последние CSS-правила легко можно адаптировать.
Меню сайта
![]() Постраничная навигация WordPress |