WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Купить персональные IPV4 и IPV6 прокси

get_boundary_post() WP 2.8.0

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

Первый или последний пост можно получить из таксономии текущей записи (поста). Также можно указать элементы таксономии, посты в которых не нужно учитывать. См. параметры: $in_same_term и $excluded_terms.

Функция устанавливает указатель поста на первый пост.

Хуков нет.

Возвращает

Массив/null.

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

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

get_boundary_post( $in_same_term, $excluded_terms, $start, $taxonomy );
$in_same_term(логический)
Нужно ли выбирать посты из того же термина что и текущий пост.
true - нужно получить первый/последний пост из того же термина (категории) что и текущая запись.
По умолчанию:  false
$excluded_terms(строка/массив)
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();

/*
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
        )
)
*/

Массив содержит объекты постов. Каждый объект поста WP_Post содержит следующие элементы:

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(число)
Количество комментариев у записи.

Список изменений

С версии 2.8.0 Введена.

Код get boundary post: wp-includes/link-template.php WP 5.2.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 );
}

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

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

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

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 подобный код работает???

    Ответить3 года назад #
Здравствуйте, !     Войти . Зарегистрироваться