get_boundary_post

Получает первый или последний пост опубликованные на блоге.

Первый или последний пост можно получить из какой-либо категории или не входящий в какие-либо категории.

Хуков нет.

Возвращает

Массив/null/пустая строка:

  • Массив, если удалось получить данные.

  • Если: глобальная переменная $post не установлена или текущая страница не is_single() или текущая страница is_attachment() или указанной таксономии не существует, функция вернет null.

  • Пустой результат будет возвращен, если не удалось получить данные.
Функция устанавливает указатель поста на первый пост.

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

<?php get_boundary_post( $in_same_cat, $excluded_categories, $start, $taxonomy ) ?>
$in_same_cat(логический) (обязательный)
true – если нужно получить первый/последний пост из той же категории что и текущий пост.
По умолчанию:  false
$excluded_categories(строка/массив)
ID категорий, посты в которых не будут учитываться при определении первого или последнего поста. Через запятую или в виде массива.
По умолчанию: ”
$start(логический)
true, если нужно показать первый пост. false, если нужно показать последний пост.
По умолчанию:  true
$taxonomy(строка)
Название таксономии для параметра $excluded_categories.
По умолчанию:  ‘category’

Примеры

#1. Выведем заголовок последней записи из текущей категории

Под текущая категория понимается: категории к которой относится пост, подразумевается что функция вызывается на странице поста.

$last = get_boundary_post( true, '', false )[0];
echo $last->post_title;

#2 Получим первый пост на блоге

<?php
function get_boundary_post( $in_same_term = false, $excluded_terms = '', $start = true, $taxonomy = 'category' ) {
	$post = get_post();
	if ( ! $post || ! is_single() || is_attachment() || ! taxonomy_exists( $taxonomy ) )
		return null;

	$query_args = array(
		'posts_per_page' => 1,
		'order' => $start ? 'ASC' : 'DESC',
		'update_post_term_cache' => false,
		'update_post_meta_cache' => false
	);

	$term_array = array();

	if ( ! is_array( $excluded_terms ) ) {
		if ( ! empty( $excluded_terms ) )
			$excluded_terms = explode( ',', $excluded_terms );
		else
			$excluded_terms = array();
	}

	if ( $in_same_term || ! empty( $excluded_terms ) ) {
		if ( $in_same_term )
			$term_array = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );

		if ( ! empty( $excluded_terms ) ) {
			$excluded_terms = array_map( 'intval', $excluded_terms );
			$excluded_terms = array_diff( $excluded_terms, $term_array );

			$inverse_terms = array();
			foreach ( $excluded_terms as $excluded_term )
				$inverse_terms[] = $excluded_term * -1;
			$excluded_terms = $inverse_terms;
		}

		$query_args[ 'tax_query' ] = array( array(
			'taxonomy' => $taxonomy,
			'terms' => array_merge( $term_array, $excluded_terms )
		) );
	}

	return get_posts( $query_args );
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *