get_adjacent_post_link() WP 3.7.0

Отримує посилання (HTML тег A) наступний/попередній пост із зазначеної таксономії (за замовчуванням).

Працює з усіма типами записів (з типом запису поточного поста – Global $post ).

Використовується на сторінках типу is_single() .

Для цієї функції існують обгортки, для зручного використання:

Працює на основі:
get_adjacent_post()

Повертає

Строку. HTML код посилання:

<a rel="nofollow" href="/post_name">Заголовок поста</a>

Використання

get_adjacent_post_link( $format, $link, $in_same_term, $excluded_terms, $previous, $taxonomy );
$format
(рядок) (обов’язковий)
Формат посилання.
%linkбуде замінено на HTML код посилання
<a> . Наприклад, ‘
%link →‘ виведе
<a ...> →.
$link
(рядок) (обов’язковий)
Анкор посилання.
'%title'буде замінено на заголовок запису.
$in_same_term
(логічний)
true – шукатиме суміжні записи у тому елементі таксономії (рубриці) як і поточна стаття, звідки викликається функція. false – шукатиме посилання з усіх елементів таксономії.


Типово: false
$excluded_terms
(масив/рядок)
ID елементів таксономії, статті у яких потрібно враховувати. Вказується в масиві або рядку через кому, наприклад:
'1,5,15'або
array(1,5,15).


За замовчуванням: ”
$previous
(логічний/рядок)
Який запис шукати: наступний за поточною статтею (false) або до поточної статті (true).


Типово: true
$taxonomy
(рядок)
Назва таксономії, з якою працювати, якщо є параметр $in_same_term.


Типово: ‘category’

Приклади

0

#1 Демонстрація

Нижче варіанти виклику функції і те, що в результаті виводиться:

# Посилання на попередній запис
echo get_adjacent_post_link( '← %link', '%title' );

# виведе: ← <a href="http://test.ru/markup" rel="prev">Маркування</a>

# Посилання на наступний запис
echo get_adjacent_post_link( '%link →', '%title', 0, '', false );

# виведе: <a href="http://example.com/some" rel="next">Щось</a> →        

# Посилання на попередній запис з поточної рубрики
echo get_adjacent_post_link( '%link', '← %title', 1 );

# виведе: <a href="http://test.ru/markup" rel="prev">← Маркування</a>

# Посилання на наступний запис з поточної рубрики
echo get_adjacent_post_link( '%link', '%title →', 1, '', false );

# виведе: <a href="http://example.com/some" rel="next">Щось →</a>

# Посилання на попередній запис з поточного елементу таксономії (my_tax), для довільних таксономій
echo get_adjacent_post_link( '%link', '%title →', 1, '', 1, 'my_tax' );

# Посилання на наступний запис з поточного елементу таксономії (my_tax)
echo get_adjacent_post_link( '%link', '%title →', 1, '', 0, 'my_tax' );

# Посилання на попередній запис не враховуючи записи з рубрик 5 та 10
echo get_adjacent_post_link( '%link', '%title →', 0, '5,10');
0

#2 Функція кільцевої перелінковки

Функція з коментарів від Campusboy , яка може стати в нагоді.

Особливість функції в тому, якщо слід. або перед. запису немає, то буде виведено посилання на перший або останній запис відповідно.

/**
 * Виводить посилання (HTML тег A) на суміжні записи (наступна/попередня).
 *
 * За відсутності суміжного запису виводить запис із протилежного кінця рубрики. Працює в межах тієї рубрики, де знаходиться запис.
 *
 * @param string $course набуває значення next/prev.
 */
function da_the_adjacent_post_link( $course = '' ){
  global $post;
  $course = ($course == 'prev')? true: false;
  $order = ($course)? 'DESC' : 'ASC';
  $class = ($course)? 'prev': 'next';

  $link = get_adjacent_post_link( '%link', '%title', true, '', $course );

  if (! $link) {
	$term = get_the_terms( $post->ID, 'category' );
	$ term = $ term [0];
	$article = get_posts([
	  'numberposts' => 1,
	  'exclude' => $post->ID,
	  'category' => $term->term_id,
	  'order' => $order
	]);

	if ( empty($article) )
	  return false;
	else
	  $article = $article[0];

	$link = sprintf( '<a href="%s" rel="%s">%s</a>', get_the_permalink($article->ID), $class, $article->post_title );
  }

  echo $link;
}

список змін

З версії 3.7.0Введено.

Код get_adjacent_post_link() WP 6.0.2

function get_adjacent_post_link( $format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category' ) {
	if ( $previous && is_attachment() ) {
		$post = get_post( get_post()->post_parent );
	} else {
		$post = get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );
	}

	if (! $post) {
		$output = '';
	} else {
		$title = $post->post_title;

		if ( empty( $post->post_title ) ) {
			$title = $previous? __('Previous Post'): __('Next Post');
		}

		/** Цей filter is documented в wp-includes/post-template.php */
		$title = apply_filters( 'the_title', $title, $post->ID);

		$date = mysql2date( get_option( 'date_format' ), $post->post_date );
		$rel = $previous? 'prev': 'next';

		$string = '<a href="' . get_permalink( $post ) . '" rel="' . $rel . '">';
		$inlink = str_replace( '%title', $title, $link );
		$inlink = str_replace( '%date', $date, $inlink );
		$inlink = $string. $inlink . '</a>';

		$output = str_replace( '%link', $inlink, $format );
	}

	$adjacent = $previous? 'previous' : 'next';

	/**
	 * Filters the adjacent post link.
	 *
	 * The dynamic portion of the hook name, `$adjacent`, refers to the type
	 * of adjacency, 'next' або 'previous'.
	 *
	 * Possible hook names include:
	 *
	 * - `next_post_link`
	 * - `previous_post_link`
	 *
	 * @ Since 2.6.0
	 * @since 4.2.0 Added `$adjacent` parameter.
	 *
	 * @param string $output 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 є попередньою або next.
	 */
	return apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post, $adjacent);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *