WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

get_next_post_link() WP 3.7.0

Получает ссылку (html код a) на следующий по дате пост относительно текущего.

Чтобы получить ссылку на предыдущий пост, используйте get_previous_post_link().

Используется в: next_post_link().
Работает на основе: get_adjacent_post_link()

Хуков нет.

Возвращает

Строку: HTML код ссылки:

<a rel="next" href="/ярлык_записи">Заголовок записи</a>

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

get_next_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy );
$format(строка)
Формат в котором будет показана ссылка. %link заменится HTML код <a>. Например, '%link →' выведет <a ...> →.
По умолчанию: '%link »'
$link(строка)
Анкор ссылки. '%title' заменится на заголовок записи.
По умолчанию: '%title'
$in_same_term(логический)
true - получить следующий пост из текущей рубрики. Если запись находится в произвольной таксономии, то нужно указать параметр taxonomy.
По умолчанию: false
$excluded_terms(массив/строка)
Исключить рубрики (термины). Можно указать строкой или массивом: '1,5,15' или array(1,5,15).
По умолчанию: ''
$taxonomy(строка)
Название таксономии для параметра $in_same_term.
По умолчанию: 'category'

Примеры

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

# ссылка на следующую запись
echo get_next_post_link();

# выведет: <a href="http://wptest.ru/some" rel="next">Что-то</a> →      

# ссылка на следующую запись из текущей рубрики
echo get_next_post_link( '%link', '%title →', 1 );

# выведет: <a href="http://wptest.ru/some" rel="next">Что-то →</a>

# ссылка на следующую запись из текущего элемента таксономии (my_tax)
echo get_next_post_link( '%link', '%title →', 1, '', 'my_tax' );

#2 Добавим свой класс к ссылкам

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

$next = get_next_post_link( '%link', 'next post', true ); 
echo str_replace( '<a ', '<a class="myclass" ', $next );

$prev = get_previous_post_link( '%link', 'prev post', true );
echo str_replace( '<a ', '<a class="myclass" ', $prev );

Код get next post link: wp-includes/link-template.php WP 4.8.1

<?php
function get_next_post_link( $format = '%link &raquo;', $link = '%title', $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' ) {
	return get_adjacent_post_link( $format, $link, $in_same_term, $excluded_terms, false, $taxonomy );
}

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

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

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

get_next_post_link 5 комментариев
  • campusboy1732 cайт: wp-plus.ru

    Жаль, что нет дефолтной настройки, что делать, если функция ничего не возвращает. К примеру, у последней записи ничего не выведет эта функция. Хотелось бы "зациклить", к примеру, чтобы она показала первую запись из рубрики в данном случае.

    P.S.: Гляжу цвета меняешь на летние smile непривычно

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

      В ВП есть фильтр:

      /**
      	 * Filter the adjacent post link.
      	 *
      	 * The dynamic portion of the hook name, `$adjacent`, refers to the type
      	 * of adjacency, 'next' or 'previous'.
      	 *
      	 * @since 2.6.0
      	 * @since 4.2.0 Added the `$adjacent` parameter.
      	 *
      	 * @param string  $output   The adjacent post link.
      	 * @param string  $format   Link anchor format.
      	 * @param string  $link     Link permalink format.
      	 * @param WP_Post $post     The adjacent post.
      	 * @param string  $adjacent Whether the post is previous or next.
      	 */
      	return apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post, $adjacent );

      Можно через него проверить, если вывода нет, сделать свой запрос в БД получить первую или последнюю запись и вернуть в нужном формате. См. код функции get_adjacent_post_link().

      П.С. да меняю, уже поменял, надоели эти цвета разврата smile

      Ответить2 года назад #
      • campusboy1732 cайт: wp-plus.ru

        Я без фильтра делал, так как слабо они мне даются smile Выложу сюда код, может кому пригодится. И не надо спрашивать, почему именно так smile по-другому прошло не получалось и не придумывалось. Вкратце: если нет следующей статьи - показывать самую первую, если нет предыдущей - показывать самую последнюю.

        <ol class="rounded-list">
           <?php
        	 $previous_post = get_previous_post_link( '%link', '%title', 1 );
        	 $next_post = get_next_post_link ( '%link', '%title', 1 );
        	 if ( empty ($previous_post) ){
        		 $previous_post = get_around_post ('DESC');
        	 }
        	 if ( empty ($next_post) ){
        		 $next_post = get_around_post ('ASC');
        	 }
        			function get_around_post ($side){
        			global $posts;
        			$category = get_the_category(); rsort( $category ); $cat_add_id = $category[0]->term_id;
        			$posts = get_posts( array(
        	'cat'     => $cat_add_id,
        	'posts_per_page' => 1,
        	'exclude' => $GLOBALS['post']->ID,
        	'order' => $side,
        			) );
        			if($posts){
        			foreach( $posts as $post ){
        	$around_post = '<a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a>';
        	return $around_post;
        			}
        		 }
        		 wp_reset_postdata();
        	}
           ?>
        	<li><?php echo $previous_post; ?></li>
        	<li><?php echo $next_post; ?></li>
        </ol>

        P.S.: Ну программисты те ещё извращуги, потому мне нравилось smile Сейчас тоже нравится, но надо привыкнуть - на фоне тёмного дизайна яркие сочные вставки... психика должна приспособиться smile

        Ответить2 года назад #
  • Как вариант модификации ссылок на предыдущий/следующий пост со своим классом , ну или + еще какие либо аттрибуты

    $next = get_next_post_link('%link', 'next post', true); 
    echo preg_replace('/(\<a\b)/i', '<a class="next-link" ', $next);
    
    $prev = get_previous_post_link('%link', 'prev post', true);
    echo preg_replace('/(\<a\b)/i', '<a class="prev-link" ', $prev);
    1
    Ответить21 день назад #
    • Kama4472

      Хороший пример, только зачем тут preg_replace? Так же проще и понятнее:

      echo str_replace('<a ', '<a class="prev-link" ', $prev );
      Ответить21 день назад #

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

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