Дек
16
5

Ссылки на предыдущие / следующие WordPress записи: функции next_post_link, previous_post_link и др.

Ссылки на предыдущий и следующий постыВ статье про оформление записей блога я рассмотрел примеры и коды для вывода некоторых дополнительных информационных элементов на страницах постов: связных заметок, названий тегов/категорий и т.п. Похожей фишкой также являются ссылки на предыдущие и следующие WordPress записи. Данные линки будут полезны при навигации посетителей сайта, а также являются еще одним способом перелинковки. Именно поэтому стараюсь добавлять их в каждый свой проект. 

В реализации задачи нам помогут 4 функции, о которых расскажу ниже:

Поскольку речь идет о странице постов (Post), то в 99% случаев вам нужно будет редактировать файл шаблона single.php (либо тот, где в вашей теме задается формат вывода единичных статей). Функции используются в цикле Loop. Если же требуется убрать следующие / предыдущие записи в WordPress, то ищите соответствующий код в этом же файле шаблона и удаляйте (или закомментируйте) его.  

Функция next_post_link

По умолчанию формируется линк на заметку, имеющую более новую дату создания сразу после текущей (т.к. все посты располагаются в хронологическом порядке). Вот как он выглядит в коде и на сайте:

Вывод следующей записи в WordPress

Синтаксис функции:

<?php next_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy ); ?>

Здесь:

  • format (строка) — определяет общий формат генерируемой ссылки, где с помощью переменной %link можете задавать какой-то текст до и после нее. По умолчанию это просто линк со стрелочкой: ‘%link &raquo;’
  • link (строка) — анкор ссылки на следующую запись в WordPress, параметр %title подставляет ее заголовок.
  • in_same_term (boolean) — определяет будут ли рассматриваться в работе только элементы из текущей категории. Допустимые значения true / false (1 / 0), по умолчанию второй вариант.
  • excluded_terms (строка или массив) — укажите ID категорий блога, заметки из которых будут исключены из выборки. Допускается либо массив array(2, 5, 4) либо написание в строку через запятую. Полезно при работе с GoGetLinks, когда нужно запретить показ рекламных постов в данном блоке.
  • taxonomy (строка) — содержит название таксономии, из которой берутся следующие записи, если переменная $in_same_term = true.

Судя из скриншота выше, понятно, что все эти параметры не являются обязательными. Вот пример использования функции на одном из моих сайтов:

<?php next_post_link('<small>(следующая статья)</small> %link &rarr;','%title', FALSE, 152) ?>

Здесь я задаю свой формат для отображения линка + исключаю из выборки все элементы, принадлежащие разделу ID = 152.

Если вам нужно вывести в WordPress следующий пост из той же категории, то пригодится код ниже (при этом игнорируется раздел ID = 33):

<?php next_post_link( '%link', 'Следующая заметка в разделе', TRUE, '33' ); ?>

Когда хотите работать только с текущей конкретной таксономией, указывайте ее название в параметрах (например, testimonial):

<?php next_post_link( '%link', 'Следующий >>', TRUE, ' ', 'testimonial' ); ?>

Функция previous_post_link

Принцип работы с предыдущими записями WordPress аналогичен приведенному выше описанию, как и синтаксис. Выглядит так:

Предыдущие записи WordPress

Соответствующий код:

<?php previous_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy ); ?>
  • format (строка) — задает формат создаваемой ссылки, за которую отвечает переменная %link (добавляйте текст/теги до и после нее). По умолчанию — ‘&laquo; %link’.
  • link (строка) — анкор линка, для вставки заголовка пишите %title.
  • in_same_term (boolean) — если значение true, то будут выводиться только объекты из того же раздела блога.
  • excluded_terms — убираем ненужные категории, указывайте ID через запятую (как строку) или массивом.
  • taxonomy (строка) — определяет таксономию выборки предыдущей записи в WordPress, если активен параметр $in_same_term.

В одном из блогов использую:

<?php previous_post_link('&larr; %link', '%title', FALSE, 107) ?>

В коде все стандартно кроме исключения категории ID = 107. Ну, или вот еще пример:

<?php previous_post_link('<strong>%link</strong>', '<< Предыдущая', TRUE, '33'); ?>

Здесь делаем жирный шрифт + вместо заголовка элемента пишется определенная фраза (хотя лучше в перелинковке использовать тайтл). Выводятся объекты только текущей категории кроме той, у которой ID = 33. 

Функция the_post_navigation

Данное решение объединяет обе ссылки на предыдущие и следующие записи WordPress. Это сделано для удобства, заменяет вызов двух функций одной. Если вам нужно получить на выходе HTML код без отображения, применяйте get_the_post_navigation().

Синтаксис the_post_navigation максимально простой:

<?php the_post_navigation( $args ); ?>

Где $args — набор разных не обязательных параметров:

  • $prev_text — анкор предыдущей ссылки (по умолчанию %title).
  • $next_text — аналогично текст линка но уже на следующий пост (изначально %title).
  • $in_same_term (true/false) — позволяет показывать статьи только из текущей таксономии.
  • $excluded_terms — исключаемые ID категорий через запятую.
  • $taxonomy — название таксономии для выборки, если in_same_term = true.
  • $screen_reader_text — заголовок всего блока (по умолчанию — Post navigation).

Таким образом, мы видим, что здесь имеются такие же переменные, как и в прошлых «единичных» функциях previous_post_link, next_post_link: анкоры, выборка по таксономиям и т.п. Использование решения просто сделает ваш код более компактным, да и нет смысла повторять одни и те же параметры два раза.

Рассмотрим самую простую ситуацию, когда нужно вывести навигацию по элементам из той же категории:

<?php the_post_navigation( array(
            'prev_text'                  => 'следующий: %title',
            'next_text'                  => 'предыдущий: %title',
            'in_same_term'          => true,
            'taxonomy'                 => 'category',
            'screen_reader_text'  => 'Еще почитать',
        ) ); ?>

Функция posts_nav_link

Если я правильно понимаю, то ее можно использовать не только для отображения в единичной записи, но и в архивных страницах категорий, заметках по месяцам, датам и т.п. То есть в single.php она будет отвечать за ссылки на предыдущие/следующие WordPress статьи, а в архивных — за навигацию по страницам.

Синтаксис posts_nav_link:

<?php posts_nav_link( $sep, $prelabel, $nextlabel ); ?>

Здесь:

  • $sep — разделитель, отображаемый между ссылками (раньше был ::, сейчас —).
  • $prelabel — текст линка предыдущих элементов (по умолчанию: « Previous Page).
  • $nxtlabel — текст для следующей страницы/постов (Next Page »).

Вот интересный пример с картинками вместо текстовых линков:

<?php posts_nav_link( ' ', '<img src="' . get_bloginfo( 'stylesheet_directory' ) . '/images/prev-img.png" />', '<img src="' . get_bloginfo( 'stylesheet_directory' ) . '/images/next-img.png" />' ); ?>

Только не забудьте загрузить изображения prev-img.png и next-img.png в директорию images в вашем шаблоне. Думаю, аналогично добавляется и другой HTML код, если, допустим, нужно использовать какие-то DIV или class при выравнивании.

Итого. По навигации там еще есть несколько других разных функций, которые вы можете найти в кодексе. Надеюсь, с этими все более-менее понятно. Насчет posts_nav_link, если честно, не уверен, позволяет ли выводить предыдущие и следующие записи на единичной странице, т.к. не тестировал, хотя в описании это упоминается. Думаю, в таком случае более эффективно и желательно использовать the_post_navigation, что поновее и с куда бОльшим числом параметров.

Если есть какие-то вопросы по навигации между постами или дополнения, пишите ниже.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 8, средний балл: 4,00 из 7)
Загрузка...

категория Категории: Возможности;
теги Теги: , , , , , .

комментариев 5 к статье “Ссылки на предыдущие / следующие WordPress записи: функции next_post_link, previous_post_link и др.”

  • BorisKo   23.12.2017

    Норм все расписал, нужно больше таких постов! не всегда получается наийти инфу на кодексе..

  • Алексей   03.01.2018

    Дополнительная перелинковка блогу не помешает) Но я разместил сразу после статьи, а не под комментариями, как у вас. Думаю, так лучше заметно.

  • Tod   03.01.2018

    Алексей, это старый шаблон, возможно, действительно лучше после поста добавлять. Но у меня там еще расположены ссылки «похожих заметок», поэтому не хотелось мешать все в кучу.

  • Людмила   22.11.2020

    Здравствуйте! Подскажите, пожалуйста, как можно убрать ссылки на предыдущий и следующий пост внизу страницы в теме twenty sixteen. Какую, конкретно часть кода нужно удалить. Буду очень признательна за ответ.

  • Tod   24.11.2020

    Людмила, в файле шаблона single.php ищите и удаляйте функцию, отвечающую за навигацию the_post_navigation.

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


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости