Содержание:
- Навигация по подстраницам одиночной записи/страницы
- Навигация между соседними записями
- Стандартная навигация «вперед/назад» между страницами записей (рубрики, метки, архивы и т.д.)
- Стандартная навигация «вперед/назад» между страницами комментариев
- Навигация по номеру страницы для страниц записей
- Навигация по номеру страницы для страниц комментариев
Навигация по подстраницам одиночной записи/страницы
Имеются в виду подстраницы создаваемые тегом <!—nextpage—> в html-редакторе.
wp_link_pages() — функция для вывода ссылок на подстраницы. Используется внутри цикла WordPress, обычно перед и/или после основного содержания записи.
<?php $args = array( 'before' => '<p>Страницы: ', // Текст перед ссылками на страницы 'after' => '</p>', // Текст после ссылок на страницы 'link_before' => , // Добавляет текст в начало ссылки 'link_after' => , // Добавляет текст в конец ссылки 'next_or_number' => 'number', // number (по умолчанию) - текст ссылки содержит номер страницы. next - ссылки в стиле "следующая/предыдущая" страница 'nextpagelink' => 'Следующая страница', // Текст для ссылки на следующую страницу, если next_or_number = next 'previouspagelink' => 'Предыдущая страница', // Текст для ссылки на предыдущую страницу, если next_or_number = next 'pagelink' => '%', // Текст ссылки, где % - номер страницы, если next_or_number = number. 'more_file' => , // Переопределяет цель ссылки. По умолчанию - текущая страница. 'echo' => 1 // 1 (по умолчанию) - выводит результат на экран. 0 - возвращает результат для последующей обработки в php ); wp_link_pages( $args ); ?>
Навигация между соседними записями
previous_post_link() и next_post_link() — ссылки на предыдущую и следующую запись в ленте блога (или в ленте рубрики) относительно текущей записи. Следующая запись определяется по дате публикации.
<div class="navigation">
<div class="previous_link">
<?php
$format = '<em>%link</em>'; // Вид ссылки, %link - ссылка на предыдущую статью.
$link = '%title'; // Текст ссылки, %title - заголовок предыдущей статьи.
$in_same_cat = false; // Измените значение на true - чтобы ссылки были на записи находящиеся в той же рубрике, что и текущая запись. По умолчанию - false.
$excluded_categories = ''; // ID рубрик. Ссылки на записи, принадлежащие указанным рубрикам, показаны не будут. Чтобы указать несколько рубрик используйте AND. Например '1 AND 12 AND 34'.
previous_post_link($format, $link, $in_same_cat , $excluded_categories);
?>
</div><!--previous_link-->
<div class="next_link">
<?php next_post_link('<em>%link</em>', '%title'); ?>
</div><!--next_link-->
</div><!--navigation-->
Стандартная навигация «вперед/назад» между страницами записей (рубрики, метки, архивы и т.п.)
posts_nav_link() — одна функция для вывода ссылок на предыдущую и следующую страницы.
<div class="navigation"> <?php $separator = '—'; //Разделитель $prev_text = '« Предыдущая страница'; $next_text = 'Следующая страница »'; posts_nav_link($separator, $prev_text, $next_text); ?> </div><!--navigation-->
previous_posts_link() и next_posts_link() — те же ссылки, но по отдельности. Для дополнительной обработки ссылок в PHP используются функции get_previous_posts_link() и get_next_posts_link().
<div class="navigation">
<div class="previous_link">
<?php
$label = '« Предыдущая страница';
$max_pages = 0; // Ограничивает количество страниц на которых отображается ссылка. По умолчанию 0 - без ограничений.
previous_posts_link($label, $max_pages);
?>
</div><!--previous_link-->
<div class="next_link">
<?php next_posts_link('Следующая страница »'); ?>
</div><!--next_link-->
</div><!--navigation-->
Стандартная навигация «вперед/назад» между страницами комментариев
previous_comments_link() и next_comments_link() — ссылки на предыдущую и следующую страницы. Использование аналогично previous_posts_link() и next_posts_link().
<div class="navigation">
<div class="previous_link">
<?php
$label = '« Предыдущая страница';
$max_pages = 0; // Ограничивает количество страниц на которых отображается ссылка. По умолчанию 0 - без ограничений.
previous_comments_link($label, $max_pages);
?>
</div><!--previous_link-->
<div class="next_link">
<?php next_comments_link('Следующая страница »'); ?>
</div><!--next_link-->
</div><!--navigation-->
Навигация по номеру страницы для страниц записей
paginate_links() — стандартная функция WordPress для нумерации страниц. Т.к. функция требует дополнительной настройки, имеет смысл создать в functions.php новую функцию (пусть называется advanced_page_navigation() ) и поместить весь управляющий код внутрь нее:
// Код функции поместить в functions.php
function advanced_page_navigation($args = false) {
global $wp_rewrite, $wp_query;
if ($wp_query->max_num_pages == 1 || $wp_query->max_num_pages == 0) return; // Если страница единственная, навигацию скрываем.
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; // Определение текущей страницы
$default_args = array( // Массив параметров по умолчанию.
'base' => @add_query_arg('page','%#%'),
'format' => '',
'total' => $wp_query->max_num_pages, // Максимальное количество страниц. В данном случае - все страницы.
'current' => $current, // Текущая страница.
'show_all' => false, // true - показывает ссылки на все страницы (без сокращений). false - выводит ссылки в соответствии с параметрами max_size, mid_size, end_size.
'max_size' => 10, // Максимальное количество ссылок на страницы.
'mid_size' => 2, // Количество ссылок на страницы слева и справа от текущей.
'end_size' => 1, // Количество ссылок на страницы от начала и от конца списка (включая первую и последнюю).
'type' => 'plain', // plain - функция возвращает ссылки разделенные символом новой строки. list - ссылки на страницы представлены как немаркированный список (ul). array - возвращает ссылки в виде массива php.
'prev_text' => '<', // Текст кнопки "предыдущая страница"
'next_text' => '>', // Текст кнопки "следующая страница"
'echo' => false // 1 (true) - выводит результат на экран. 0 (false) - возвращает результат для последующей обработки в php
);
$args = wp_parse_args($args, $default_args);
if ( $args['max_size'] >= $wp_query->max_num_pages ) $args['show_all'] = true; else $args['show_all'] = false;
if( $wp_rewrite->using_permalinks() ) // Если включены постоянные ссылки
$args['base'] = user_trailingslashit( trailingslashit( remove_query_arg('s',get_pagenum_link(1) ) ) . 'page/%#%/', 'paged');
if( !empty($wp_query->query_vars['s']) ) // Если постоянные ссылки отключены
$args['add_args'] = array('s'=>get_query_var('s'));
$args['echo'] = false; // На всякий случай
echo "<div class=\"paged-navigation\"><span class=\"navigation-info\">Страница $current из {$wp_query->max_num_pages} </span> " . paginate_links($args) . '</div>'.PHP_EOL;
}
В шаблон вставляем новую функцию. Все компактно и красиво:
<div class="navigation"> <?php advanced_page_navigation($args); // С помощью массива $args можно переопределить значения по умолчанию ?> </div><!--navigation-->
Пример css-оформления кнопок (как на этом сайте) для type = plain
Навигация по номеру страницы для страниц комментариев
paginate_comments_links() — встроенная функция для создания нумерации страниц комментариев, но мы ее использовать не будем из-за нескольких ограничений. Вместо нее воспользуемся более мощной paginate_links(). Как и в предыдущем примере, для простоты создаем вспомогательную функцию — advanced_comments_page_navigation():
// Код функции поместить в functions.php
function advanced_comments_page_navigation($args = false) {
global $wp_rewrite;
if ( !is_singular() || !get_option('page_comments') ) return;
$max_num_pages = get_comment_pages_count();
if ( $max_num_pages == 1 || $max_num_pages == 0) return;
$current = get_query_var('cpage');
if ( !$current ) $current = 1;
$default_args = array(
'base' => add_query_arg( 'cpage', '%#%' ),
'format' => '',
'total' => $max_num_pages,
'current' => $current,
'show_all' => false,
'max_size' => 10,
'mid_size' => 2,
'end_size' => 1,
'type' => 'plain',
'prev_text' => '<',
'next_text' => '>',
'echo' => false,
'add_fragment' => '#comments'
);
$args = wp_parse_args( $args, $default_args );
if ( $args['max_size'] >= $max_num_pages ) $args['show_all'] = true; else $args['show_all'] = false;
if ( $wp_rewrite->using_permalinks() )
$args['base'] = user_trailingslashit(trailingslashit(get_permalink()) . 'comment-page-%#%', 'commentpaged');
$args['echo'] = false;
echo "<div class=\"paged-navigation\"><span class=\"navigation-info\">Страница $current из $max_num_pages </span> " . paginate_links($args) . '</div>'.PHP_EOL;
}
В шаблон вставляем:
<div class="navigation"> <?php advanced_comments_page_navigation($args); // С помощью массива $args можно переопределить значения по умолчанию ?> </div><!--navigation-->
Css-оформление такое же как и для paginate_links().






как же мне нравятся такие полные, содержательные и логичные статьи! эх, побольше бы таких — а для начинающих это вообще бесценный подарок — спасибо вам
Вопросик:
А разве можно одну запись добавлять в две рубрики? Не приводит ли это к дублированию контента и к санкциям со стороны поисковиков?
На сто процентов уверенным быть не могу, но мне кажется, что нет. Рубрики дублирование контента не дают.
А вот дублирование контента из-за древовидных комментариев я наблюдал не раз (http://www.q2w3.ru/2011/08/31/4309/), и это приводило к серьезному падению в поиске.
И еще. После долгих экспериментов я на своем сайте вообще запретил индексацию рубрик и меток. Только основная лента и страницы контента. И как-то так нормально идет )
Спасибо пригодилось!
Добрый день. Установила на сайте постраничную навигацию, true. В результате получилось, что ссылка на предыдущую страницу идет из той же рубрики, что и сама статья, а на следующую страницу — на следующую опубликованную страницу. Посоветуйте, пожалуйста, как изменить код, чтобы следующая страница была из той же рубрики. Спасибо.
Не совсем понял какую именно функцию вы имели ввиду…
Думаю, дело в том, что ваша запись находится не в одной, а в нескольких рубриках. В таком случае ссылка на следующую/предыдущую запись будет определяться из выборки записей, принадлежащих всем отмеченным рубрикам.
В общем, если хотите чтобы навигация всегда была в пределах одной рубрики, то все записи должны принадлежать только этой рубрике.