Функция get_adjacent_post и ее использование в WordPress
Функция get_adjacent_post позволяет получить либо предыдущую запись, либо следующую. Это особенно полезно для сайтов портфолио, когда необходимо вывести на экран тизер (например, миниатюру) предыдущей или следующей записи. Именно этот эффект можно видеть в популярной теме Practica Portfolio, которая продается на рынке ThemeForest.
Чтобы посмотреть на этот эффект в действии, откройте тему Practica, после чего перейдите к отдельному пункту портфолио – скажем, к Tribe of Circle. Справа от него вы увидите несколько миниатюр со стрелочками вперед и назад. Именно здесь и применяется функция get_adjacent_post.
Как работает эта функция?
Функция должна использоваться в пределах цикла. Ее использование имеет смысл, если ваши записи выводятся в хронологическом порядке (если записи сортируются по значению произвольных полей, то эта функция не подойдет).
Функция имеет следующий вид:
<?php get_adjacent_post( $in_same_cat, $excluded_categories, $previous ) ?>
Принимаемые аргументы:
- $in_same_cat (логический) – следует ли брать соседние записи из одной и той же рубрики. По умолчанию: false.
- $excluded_categories (строковый) – ID рубрик, которые требуется исключить. По умолчанию: ”.
- $previous (логический) – следует ли получать предыдущую запись. По умолчанию: true.
Функция возвращает:
- Объект записи WP_Post, если все завершилось успешно.
- null, если глобальная переменная $post не задана.
- пустую строку, если не существует соответствующих записей.
Пример использования
Допустим, нам необходимо получить предыдущий пост и следующий пост, сохранив все их данные в набор переменных.
$prev = get_adjacent_post(true,'',true); $next = get_adjacent_post(true,'',false);
Теперь мы можем вывести информацию для следующей/предыдущей записи (пример для предыдущей записи):
// вывод контента echo $prev->post_content; //вывод заголовка echo $prev->post_title; //вывод миниатюры размером 68x68 echo get_the_post_thumbnail($prev->ID, array(68,68, true) );
То же самое можно реализовать и для следующей ($next) записи.
Еще один простой вариант использования функции:
<?php $previousPost = get_adjacent_post(true, "", true)); $nextPost = get_adjacent_post(true); ?> <?php if($previousPost) : ?> <a href="<?php echo get_permalink($previousPost->ID)?>">« Previous post</a> <?php endif; ?> <?php if($nextPost) : ?> <a href="<?php echo get_permalink($nextPost->ID)?>">Next: <?php echo $next->post_title; ?> »</a> <?php endif; ?>
Здесь мы выводим ссылку на предыдущий пост (без заголовка) и ссылку на следующий пост (с заголовком). Если какой-либо из них не существует, то будет отображена только одна ссылка.