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

get_boundary_post() WP 2.8.0

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

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

Хуков нет.

Возвращает

Массив/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 Получим первый пост на блоге

$first_post = get_boundary_post()[0];

echo $first_post->post_title;

#3 Другие примеры

// последний пост на блоге, не считая категорий 5 и 20
$last_post = get_boundary_post( false, '5,20', true )[0];

// последний пост из категории текущего поста
$last_post_of_the_cat = get_boundary_post( true, '', false )[0];

// последний пост из таксономии my_tax
$last_post = get_boundary_post( false, '', true, 'my_tax' )[0];

#4 Что возвращает функция

$boundary_post = get_boundary_post();
print_r( $boundary_post );

/*
Array
(
    [0] => WP_Post Object
        (
            [ID] => 1000
            [post_author] => 1
            [post_date] => 2009-05-15 14:48:32
            [post_date_gmt] => 2009-05-15 21:48:32
            [post_content] => Текст поста
            [post_title] => Edge Case: Nested And Mixed Lists
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => closed
            [ping_status] => closed
            [post_password] => 
            [post_name] => edge-case-nested-and-mixed-lists
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2009-05-15 14:48:32
            [post_modified_gmt] => 2009-05-15 21:48:32
            [post_content_filtered] => 
            [post_parent] => 0
            [guid] => http://wptest.io/demo/?p=1000
            [menu_order] => 0
            [post_type] => post
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )
)
*/

Элементы массива, возвращаемого функцией

ID
(число
post_author
(число) Идентификатор автора записи.
post_date
(строка) Дата записи в формате YYYY-MM-DD HH:MM:SS (с учетом исправления времени).
post_date_gmt
(строка) Дата записи в формате YYYY-MM-DD HH:MM:SS (время по Гринвичу (GMT)).
post_content
(строка) Текст записи.
post_title
(строка) Заголовок записи.
post_excerpt
(строка) Цитата записи.
post_status
(строка) Статут записи, может быть: publish|pending|draft|private|static|object|attachment|inherit|future|trash.
comment_status
(строка) Возможность комментирования для записи, может быть: open|closed|registered_only.
ping_status
(строка) Статус пингов/трэкбэков, может быть: open|closed.
post_password
(строка) Пароль записи.
post_name
(строка) Имя записи (слаг). Название которое обычно используется в УРЛ-е.
to_ping
(строка) УРЛ-ы из статьи, на которые нужно отправить уведомления при обновлении поста.
pinged
(строка) УРЛ-ы из статьи, которые уже получили уведомления.
post_modified
(строка) Дата изменения записи в формате YYYY-MM-DD HH:MM:SS (с учетом корректировки времени).
post_modified_gmt
(число/строка) Дата изменения записи в формате YYYY-MM-DD HH:MM:SS (время по Гринвичу (GMT)).
post_parent
(число) ID родительской страницы (отлично от нуля у прикрепленных типов записей).
guid
(строка) Ссылка на запись. Важно: использовать этот параметр в качестве постоянной ссылки для поста неправильно, если версия вашего WordPress выше 2.5. Это уникальный идентификатор записи, который позднее стал ссылкой на запись.
menu_order
(число) Порядковый номер для построения меню (используется для постоянных страниц).
post_type
(строка) Тип записи (post|page|attachment).
post_mime_type
(строка) Миме тип записи (jpg|png|zip|pdf и т.д.). Используется для прикрепленных записей.
comment_count
(число) Количество комментариев у записи.

Код get boundary post: wp-includes/link-template.php WP 4.9

<?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 );
}

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

Из метки: query (запрос)

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

get_boundary_post 2 комментария
  • Алексей
    $last = get_boundary_post( true, '', false )[0];
    echo $last->post_title;

    У меня на тестовом серваке с версией PHP: 5.6.22 указанный в Ваших примерах код отрабатывает.
    А вот у одного клиента версия php 5.3.29!! чтобы заработало пришлось ему переписывать код следующим образом:

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

    Гугл не дал ответа с какой версии php подобный код работает???

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

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

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