## Функция GET_BOUNDARY_POST() │ WP 2.8.0
Функция get_boundary_post()
позволяет получить первый или последний пост на сайте в зависимости от даты публикации.
### Что она делает?
С помощью этой функции можно получить первый или последний пост из той же категории, к которой относится текущий пост. Также можно указать категории, посты из которых нужно исключить. Для этого используются параметры $in_same_term
и $excluded_terms
.
#### Возвращаемое значение
- **Array** — когда данные успешно получены.
- **Пустой массив** — когда нет постов (например, если посты на сайте отсутствуют).
- **null** — если:
- глобальная переменная $post
не задана.
- текущая страница не является постом.
- текущая страница является вложением.
- указанная таксономия не существует.
### Использование
```php
get_boundary_post( $in_same_term, $excluded_terms, $start, $taxonomy );
-
$in_same_term
(true/false): Получать ли пост из той же категории, что и текущий пост.true
— получить первый/последний пост из той же категории.- По умолчанию:
false
-
$excluded_terms
(array/string): ID категорий (через запятую или массив), посты из которых будут исключены.- По умолчанию:
''
- По умолчанию:
-
$start
(true/false):true
, если хотите показать первый пост.false
, если хотите показать последний пост.- По умолчанию:
true
- По умолчанию:
-
$taxonomy
(string): Название таксономии для параметра$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: Что возвращает функция?
Функция возвращает массив объектов типа [WP_Post]
.
$boundary_post = get_boundary_post();
/*
Array
(
[0] => WP_Post Object (
[ID] => 1000
[post_author] => 1
[post_date] => 2009-05-15 14:48:32
[post_title] => Edge Case: Nested And Mixed Lists
// другие поля
)
)
*/
Изменения
Функция была введена в версии 2.8.0.
Код функции
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 );
}