WordPress как на ладони
Новые WordPress шаблоны Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

previous_post_link() WP 1.5.0

Выводит ссылку на предыдущий по дате пост (запись). Функция должна использоваться на отдельных страницах (типа is_single()).

Работает со всеми типами записей (с типом записи текущего поста - global $post).

Чтобы вывести ссылку на следующий пост смотрите функцию: next_post_link().

Работает на основе: get_previous_post_link()
✈ 1 раз = 0.006207с = очень медленно | 50000 раз = 21.35с = медленно PHP 7.1.5, WP 4.8.1

Хуков нет.

Использование

<?php previous_post_link( $format, $link, $in_same_cat, $excluded_terms, $taxonomy ); ?>
$format(строка)
Формат ссылки. Контролирует что будет до и после ссылки. Тег %link в строке будет заменен на ссылку. Например, 'Перейти к %link', выведет Перейти к Название статьи. Также в строке можно использовать параметр %date, тогда в текст ссылки будет добавлена еще и дата публикации поста.
По умолчанию: '%link »'
$link(строка)
Текст ссылки (Анкор). Тег %title будет заменен заголовком статьи.
По умолчанию: '%title'
$in_same_cat(логический)
Если установить этот параметр в true или 1, то будет выводиться ссылка на следующую статью из той же категории что и текущая.
По умолчанию: false
$excluded_terms (строка)
ID категории посты из которых не нужно учитывать при подборе следующего поста. Можно указать несколько категорий, которые нужно исключить, для этого разделите ID словом and: '1 and 5 and 15'. Если указан следующий параметр $taxonomy, то тут нужно указывать термины.
По умолчанию: нет
$taxonomy(строка)
Название таксономии ссылка на запись из которой будет получаться.
По умолчанию: 'category'

Примеры

#1 Ссылка на предыдущую запись

Выведем предыдущую по дате публикации ссылку и выделим её жирным (HTML тегом strong):

<?php previous_post_link('<strong>%link</strong>'); ?>

#2 Ссылка на предыдущую запись из рубрики

Выведем ссылку на предыдущую статью из текущей категории с текстом - "Предыдущая статья из категории" вместо заголовка статьи:

<?php previous_post_link('%link', 'Предыдущая статья из категории', true); ?>

#3 Ссылка на предыдущую запись исключая рубрику

Выведем ссылку на предыдущую по дате публикации статью, но не из категории 15 (статьи из категории 15 не будут учитываться):

<?php previous_post_link('%link', '%title', false, '15'); ?>

#4 Ссылка на предыдущий пост из таксономии

Ссылка на предыдущую запись из текущего термина указанной таксономии. Нужная нам таксономия называется battle_cat:

previous_post_link( '%link', '< %title', true, '', 'battle_cat' );

Код previous_post_link: wp-includes/link-template.php VER 4.9.8

<?php
function previous_post_link( $format = '&laquo; %link', $link = '%title', $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' ) {
	echo get_previous_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy );
}

Cвязанные функции

Из метки: adjacent link (связанные ссылки)

Еще из раздела: Навигация

Еще из тегов шаблона: Записи: посты, страницы, ...

14 комментов
  • Николай Платов cайт: www.mixis.net

    Спасибо. Заработало. Можно в двух словах, как настроить стиль для этих ссылок?

    Ответить7.4 лет назад #
  • XakerFaker cайт: online-users.ru

    Спасибо огромное! Теперь у меня получилось wink

    Ответить3.8 года назад #
  • Lobzik

    Подскажите, можно ли как-то организовать навигацию по постам из одной конкретной категории? Т.е. имеются некоторые категории и, соответственно, имеются посты, относящиеся к этим категориям. Но из них есть посты, которые относятся к нескольким категориям. Задача сделать, чтобы навигация по след/пред постам происходила внутри только той категории, из которой мы зашли на страницу поста. Если использовать $in_same_cat = true, то отрабатывает правильно только если у поста 1 категория, а если несколько, то функция выбирает любую категорию из имеющихся. Возможно ли решить подобную задачу?

    Ответить3.5 года назад #
    • Kama6918

      Можно но не так просто. Придется сохранять (например в куки браузера) категорию из которой зашли и получать посты из этой категориии. Для этого отдельную функцию писать нужно будет...

      Ответить3.5 года назад #
  • Сергей

    Добавляю в файл single.php темы. WP 4.0

    <?php previous_post_link('%link', 'Предыдущая статья из категории', true); ?>

    Но ничего не происходит. Просто пустое место ;(

    Ответить3.4 года назад #
    • campusboy3053 cайт: www.youtube.com/c/wpplus

      Значит Вы смотрите статью в категории, для которой нет Предыдущей статьи.

      Ответить2.9 года назад #
  • Саша

    Как сделать тоже, но для другого типа материала? Например woocomerce ссылка на следующий, предыдущий материал из той же категории.

    Ответить2.3 года назад #
    • Kama6918

      Это к таксономиям относится... Укажите название таксономии. В комерсе она кажется product_cat называется.

      Ответить2.3 года назад #
      • Саша

        Название таксономии да product_cat но как вывести ссылки на след. пред. материал данной таксономии?

        Ответить2.3 года назад #
  • Rosta cайт: seo-help.dp.ua

    добрый день,
    сделал такую конструкцию для отображения предыдущих и следующих записей в одной категории.

    <div class="pre-navigate">
    			<div class="alignleft"><?php previous_post_link('« %link','PREVIOUSE CARD',TRUE,'') ?></div>
    			<div class="alignright"><?php next_post_link('%link »','NEXT CARD',TRUE,'') ?></div>
    			</div>

    оформил в css стиль как кнопки. Но мне не нравится:

    1. мышка в виде курсора появляется только на тексте и следовательно переходит если нажать только на текст.
    2. Если нет поста предыдущего или следующего то появляется некрасивый прямоугольник. Как его можно убрать?
    3. если смотреть на мобильном то на кнопки невозможно нажать.
      Если 1 и 2 я как то могу стерпеть, но 3 явно нарушает юзабилити сайта.

    Заранее благодарен за помощь.

    Ответить2.3 года назад #
    • campusboy3053 cайт: www.youtube.com/c/wpplus

      Привет!
      1) Потому что Вы, скорее всего, всякие отступы и так далее, что дают кнопке "объемность" задали не ссылки, а контейнеру, в котором она находится. Добавьте паддинг к ссылкам и будет всё в шоколаде, к примеру:

      .pre-navigate a {
      	padding: 5px 10px;
      }

      Данные отступы также, как и текст, будут кликабельны и решат, скорее всего, проблему с 3 пунктом.

      2) Используйте функции, на который основаны данные. К примеру эта функция (previous_post_link) ВЫВОДИТ уже готовый код, работает на основе get_previous_post_link, которая делает всё тоже самое, только возвращает код, а не выводит на экран, а значит мы можем проверить, возвращает функция что-либо или нет. Если возвращает, значит и выводим, к примеру, переделаем чуть ваш код:

      <div class="pre-navigate">
        <?php
        // Проверяем, если ссылка на предыдущий материал. Если да, то сохранятся данные в переменную $previous_link
        if ( $previous_link = get_previous_post_link('« %link','PREVIOUSE CARD',TRUE,'') ){
      	// Выводим полученные данные на экран
      	printf('<div class="alignleft">%s</div>', $previous_link);
        }
        // Проверяем, если ссылка на следующий материал. Если да, то сохранятся данные в переменную $next_link
        if ( $next_link = get_next_post_link('%link »','NEXT CARD',TRUE,'') ){
      	// Выводим полученные данные на экран
      	printf('<div class="alignright">%s</div>', $next_link);
        }
        ?>
      </div>

      Перепроверьте код, я писал в теории, проверить сейчас негде.

      2
      Ответить2.2 года назад #
Здравствуйте, !     Войти . Зарегистрироваться