WordPress как на ладони
wordpress jino

previous_post_link() WP 1.5.0

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

Чтобы вывести ссылку на следующий пост смотрите функцию: 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 WP 4.9

<?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 (связанные ссылки)

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

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

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

    Ответить6.5 лет назад #
  • Юрий

    Скажите пожалуйста, а как сделать, чтобы это работало для записей из одной таксономии. Т.е при клике выводится не последняя запись из любой рубрики пользовательской таксономии, а именно их той рубрики таксономии, где опубликована запись.

    2
    Ответить5.4 лет назад #
  • Небольшая ошибочка в "previous_post_link() работает на основе get_previous_post_link()." на самом деле на get_adjacent_post_link().

    Ответить3.1 года назад #
    • Kama4558

      C чего вы взяли? Вот код функции:

      function previous_post_link( $format = '« %link', $link = '%title', $in_same_cat = false, $excluded_terms = '', $taxonomy = 'category' ) {
      	echo get_previous_post_link( $format, $link, $in_same_cat, $excluded_terms, $taxonomy );
      }
      Ответить3.1 года назад #
  • XakerFaker cайт: online-users.ru

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

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

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

    Ответить2.6 года назад #
    • Kama4558

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

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

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

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

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

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

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

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

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

    Ответить1.4 года назад #
    • Kama4558

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

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

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

        Ответить1.4 года назад #
  • 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 явно нарушает юзабилити сайта.

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

    Ответить1.4 года назад #
    • campusboy1871 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>

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

      1
      Ответить1.4 года назад #

Здравствуйте, !

Ваш комментарий