Ссылки на предыдущие / следующие WordPress записи: функции next_post_link, previous_post_link и др.
В статье про оформление записей блога я рассмотрел примеры и коды для вывода некоторых дополнительных информационных элементов на страницах постов: связных заметок, названий тегов/категорий и т.п. Похожей фишкой также являются ссылки на предыдущие и следующие WordPress записи. Данные линки будут полезны при навигации посетителей сайта, а также являются еще одним способом перелинковки. Именно поэтому стараюсь добавлять их в каждый свой проект.
В реализации задачи нам помогут 4 функции, о которых расскажу ниже:
Поскольку речь идет о странице постов (Post), то в 99% случаев вам нужно будет редактировать файл шаблона single.php (либо тот, где в вашей теме задается формат вывода единичных статей). Функции используются в цикле Loop. Если же требуется убрать следующие / предыдущие записи в WordPress, то ищите соответствующий код в этом же файле шаблона и удаляйте (или закомментируйте) его.
Функция next_post_link
По умолчанию формируется линк на заметку, имеющую более новую дату создания сразу после текущей (т.к. все посты располагаются в хронологическом порядке). Вот как он выглядит в коде и на сайте:
Синтаксис функции:
<?php next_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy ); ?> |
Здесь:
- format (строка) — определяет общий формат генерируемой ссылки, где с помощью переменной %link можете задавать какой-то текст до и после нее. По умолчанию это просто линк со стрелочкой: ‘%link »’
- 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 →','%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 аналогичен приведенному выше описанию, как и синтаксис. Выглядит так:
Соответствующий код:
<?php previous_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy ); ?> |
- format (строка) — задает формат создаваемой ссылки, за которую отвечает переменная %link (добавляйте текст/теги до и после нее). По умолчанию — ‘« %link’.
- link (строка) — анкор линка, для вставки заголовка пишите %title.
- in_same_term (boolean) — если значение true, то будут выводиться только объекты из того же раздела блога.
- excluded_terms — убираем ненужные категории, указывайте ID через запятую (как строку) или массивом.
- taxonomy (строка) — определяет таксономию выборки предыдущей записи в WordPress, если активен параметр $in_same_term.
В одном из блогов использую:
<?php previous_post_link('← %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, что поновее и с куда бОльшим числом параметров.
Если есть какие-то вопросы по навигации между постами или дополнения, пишите ниже.
комментариев 5 к статье “Ссылки на предыдущие / следующие WordPress записи: функции next_post_link, previous_post_link и др.”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Записи и посты wordpress, оформление записи (5,91 из 7, голосов - 47)
- Проблема с адаптивными изображениями в Gutenberg редакторе WordPress (3,93 из 7, голосов - 44)
- Умный копирайт в footer.php для wordpress (5,63 из 7, голосов - 30)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений (5,19 из 7, голосов - 31)
- Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress (4,42 из 7, голосов - 31)
- Плагин TinyMCE Advanced – wordpress текстовый редактор (6,35 из 7, голосов - 20)
- Рубрики и категории wordpress, функция wp_list_categories (6,05 из 7, голосов - 20)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Норм все расписал, нужно больше таких постов! не всегда получается наийти инфу на кодексе..
Дополнительная перелинковка блогу не помешает) Но я разместил сразу после статьи, а не под комментариями, как у вас. Думаю, так лучше заметно.
Алексей, это старый шаблон, возможно, действительно лучше после поста добавлять. Но у меня там еще расположены ссылки «похожих заметок», поэтому не хотелось мешать все в кучу.
Здравствуйте! Подскажите, пожалуйста, как можно убрать ссылки на предыдущий и следующий пост внизу страницы в теме twenty sixteen. Какую, конкретно часть кода нужно удалить. Буду очень признательна за ответ.
Людмила, в файле шаблона single.php ищите и удаляйте функцию, отвечающую за навигацию the_post_navigation.