wp_link_pages() WP 0.71
Выводит ссылки навигации по страницам, для многостраничных постов (для разделения используется <!--nextpage-->, один или более раз в контенте).
Чтобы функция работала, нужно разделить контент записи html комментариями <!--nextpage-->
. После этого функция разобьет контент на страницы. Страниц получиться столько, сколько раз был вставлен разделитель <!--nextpage-->
+ одна страница.
Этот Тег шаблона нужно использовать на отдельной странице. Условно можно сказать, что нужно использовать внутри Цикла WordPress.
Для быстрой вставки <!--nextpage--> в визуальном редакторе, используйте комбинацию клавиш: alt + shift + p.
Чтобы узнать находимся ли мы на странице пагинации, используйте функцию is_paged().
Хуки из функции
Возвращает
Строку/null. Если параметр echo=true
, то вернет null и выведет результат на экран. Если echo=false
, то вернет строку - HTML код для обработки.
Использование
<?php wp_link_pages( $args ); ?>
Параметры по умолчанию
$args = array( 'before' => '<p>' . __('Pages:'), 'after' => '</p>', 'link_before' => '', 'link_after' => '', 'next_or_number' => 'number', 'nextpagelink' => __('Next page'), 'previouspagelink' => __('Previous page'), 'pagelink' => '%', 'echo' => 1, ); wp_link_pages( $args );
- $args(строка/массив)
- Параметры функции, передаваемые в виде массива или строки.
Аргументы параметра $args
- before(строка)
- Текст, который будет находится перед ссылками.
По умолчанию: '<p>Pages: ' - after(строка)
- Текст, который будет находится после ссылок.
По умолчанию: '</p>' - link_before(строка)
- Текст, который будет до каждой ссылки. С версии 2.7.
По умолчанию: '' - link_after(строка)
- Текст, который будет после каждой ссылки. С версии 2.7.
По умолчанию: '' - next_or_number(строка)
- Переключатель, определяющий нужно ли показывать ссылки как номера всех страниц (number) или показать две ссылки навигации: "вперед", "назад". Может быть: number или next.
По умолчанию: 'number' - nextpagelink(строка)
- Текст ссылки "следующая страница".
По умолчанию: 'Next page' - previouspagelink(строка)
- Текст ссылки "предыдущая страница".
По умолчанию: 'Previous page' - pagelink(строка)
- Формат текста ссылок. % будет заменено на число, так "Страница %" выведет ссылки с текстом: "Страница 1", "Страница 2" и т.д.
По умолчанию: '%' - echo(логический)
- Выводить на экран (1) или возвращать для обработки (0).
По умолчанию: 1 (true)
Примеры
#1 Базовое использование
Выведем навигацию по страницам с параметрами по умолчанию, т.е. в теге <p>, с использованием постраничных ссылок (страница 1, страница 2) и ссылок навигации "назад", "вперед".
<?php wp_link_pages(); ?>
#2 Добавление кнопки разрыва страницы в Виз.Редактор TyniMCE
Такая кнопка предусмотрена WordPress но она не выводиться. Поэтому все что нам нужно сделать - это через хук добавить в массив название этой кнопки, остальное WP сделаем сам... Для этого нужно вставить такой код в functions.php темы:
## Добавление кнопки разрыва страницы в Виз.Редактор TyniMCE add_filter('mce_buttons', 'mce_page_break'); function mce_page_break( $mce_buttons ){ $pos = array_search('wp_more', $mce_buttons, true); if( $pos !== false ) { $buttons = array_slice( $mce_buttons, 0, $pos ); $buttons[] = 'wp_page'; $mce_buttons = array_merge( $buttons, array_slice($mce_buttons, $pos) ); } return $mce_buttons; }
В результате получим такую кнопку:

#3 Обернем ссылки в тег <div>
и изменим текст каждой ссылки на "страница №":
<?php wp_link_pages('before=<div id="page-links">&after=</div>&pagelink=page %'); ?>
Альтернатива wp_link_pages
Навигация как в pagenavi. Когда нужно сделать навигацию как в этой статье, то вот код переделанный для страниц:
/** * Альтернатива wp_link_pages * ver: 1.0 */ function kama_link_pages(){ ## Настройки ================ $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 $page, $numpages; $paged = (int) $page; $max_page = $numpages; 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 = '<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.= _wp_link_page($paged-1) . $backtext .'</a>'; if( $start_page >= 2 && $pages_to_show < $max_page ) { $out .= _wp_link_page(1) . ( $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>'; else $out .= _wp_link_page($i) . $i .'</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 .= _wp_link_page($i) . $i .'</a>'; } } } if( $end_page < $max_page ) { if( $dotright_text && $end_page != ($max_page-1) ) $out.= '<span class="extend">'. $dotright_text2 .'</span>'; $out .= _wp_link_page($max_page) . ( $last_page_text ?: $max_page ) .'</a>'; } if( $nexttext && $paged != $end_page ) $out .= _wp_link_page($paged+1) . $nexttext .'</a>'; $out .= '</div>'; return $out; }
После того, как вставили код в файл темы functions.php вызываем функцию так:
<?php echo kama_link_pages(); ?>
Настройки находятся вначале функции.
Код wp link pages:
wp-includes/post-template.php
VER 5.0.3
Cвязанные функции
Из раздела: Страницы
Еще из тегов шаблона: Записи: посты, страницы, ...
- body_class()
- get_post_format()
- get_post_time()
- get_the_date()
- have_posts()
- in_the_loop()
- next_image_link()
- next_post_link()
- next_posts_link()
- post_class()
- post_password_required()
- posts_nav_link()
Здравствуйте!
Подскажите, пожалуйста, как настроить ЧПУ при использовании функция wp_link_pages()
Структура ссылок моего сайта: /%category%/%postname%.html
И соответственно получаются ссылки:
http://домен/рубрика/статья.html/2
http://домен/рубрика/статья.html/3 и т.д.
Очень бы хотелось найти решение (ищу, к сожалению, безрезультатно уже давно), например:
http://домен/рубрика/статья-2.html
http://домен/рубрика/статья-3.html и т.д.
или
http://домен/рубрика/статья/2.html
http://домен/рубрика/статья/3.html и т.д.
А также сохранить структуру ссылок /%category%/%postname%.html
Буду очень рада любой помощи.
Послушайте совета - оставьте все как есть, потому что исправление до того варианта который вам нужен, дорогого стоит, я точно не знаю как это сделать. В такой структуре нет ничего плохого, кроме, наверное, ваших предрассудков и пожеланий.
Вообще было бы логично просто убрать .html и все бы стало выглядеть очень даже нормально. Попробуйте изменить ЧПУ (убрать .html) и проверьте, чтобы старые с .html редиректились на новые. В WP подобный редирект должен делаться автоматически.
Здравствуйте !
Скажите, пожалуйста - Вам удалось побороть эту проблему с адресами подстраниц ?
Столкнулся с такой-же задачей и не знаю с какой стороны подойти к её решению.
Да тут баг на баге!!! Если url оставить в покое…, то title имеют одинаковое содержание.
Есть правда решение проблемы с дублированными заголовками ... , но с плагином All in One SEO это не работает.
Вот и получается, чтобы разбить нормально страницу надо отключить:
1) плагин All in One SEO (отказаться от SEO);
2) изменить структуру постоянных ссылок /%category%/%postname% (убрать .html) и
3) исправить дублирование заголовков.
И останется сайт без SEO, но с навигацией по страницам постаnea. Прискорбно все это, а функцию wp_link_pages для обычных юзеров в топку…
Плагин с исправлением всего выше перечисленного нужен людям не только в рунете… Работа стоит денег. Возьметесь?
Меня немного не устраивает расположение вот это навигации. наверно это нужно в css изменить?только в css у меня этого нету,самому прописать надо?
Тимур, есть ли возможность выдернуть переменную $i из цикла и запихнуть ее в title через функцию the_title()?
Как-нибудь на подобии:
Ну или что-нить в этом роде?
С уважением...
Нет так не получится.
Заголовок уже выведен и после этого срабатывает функция пагинации... Тут надо отдельно заголовок менять... В массиве $wp_query есть параметр
page
в, на основе него можно... Подробнее не подскажу.Тимур, спасибо за наводку, собственно вот код, может кому пригодится:
в header.php меняем the_title(); на my_title и показываем поисковикам язык.
Здравствуйте. Подскажите, как сделать для данных ссылок rel nofollow, чтоб не было дублей контента, так как яндекс к примеру их индексирует и выводит в поиск.
А как сделать, что бы выводились и стрелочки вперед/назад и цифры? Почему нет комбинированного варианта для парамета 'next_or_number'?
Отвечу сам, что бы не отвлекать уважаемого wp-kama от более важных дел (на других страницах я задал более сложные вопросы, на которые пока что никто не смог дать ответ)
В файле functions.php нужно вставить код:
(подсмотрел на англоязычном форуме)
Спасибо за код. Хорошо бы еще к нему скрин для наглядности, как это выглядит в итоге...
П.С. Вчера добавил возможность загружать картинки к комментам...
Добрый вечер!
Подскажите пожалуйста добрые люди, как добавить атрибут
class="page-link"
к ссылкам, надо чтоб так было<a class="page-link" href="#">1</a>
Вставляем такую строчку перед
return $out;
Добрый вечер!
Как разделить страницы и прописать заголовки каждому разделу для
<!--nextpage-->
как в примере в теге<p>
ниже в html коде.Вместо нумерации для title страниц использовал это решениеhttps://wordpress.stackexchange.com/questions/202709/how-to-give-paged-links-custom-title/295994#295994
осталось проделать заголовки/название каждой рубрики для
<!--nextpage-->
.Зарание благодарен
Тимур, здравствуй! Такой вопрос, немного не по теме, но рядом. Вот разбил я большой пост на много страниц, стали люди комментировать, и вот какое дело. Все комментарии выводятся на каждой из страниц поста, а можно ли сделать, чтобы комментарии выводились только на последней старнице. Мне кажется так логичней ведь будет, ладно бы комментарий оставленный, допустим, на странице № 3 к ней и привязывался, но когда вся куча на каждой странице, это слишком.
Вот тут почитай. Чтобы на последний странице выводить, нужно заюзать такой код:
Код не проверял...
Применил код, но комментарии всё равно выводятся на каждой странице пагинации записи.
Вопрос. Как проще всего сделать только две ссылки, ведущие на следующую и предыдущую страницу (например, "Вперёд" и "Назад"), и всё! Кручу, верчу и никак не получается.