get_children()
Получает дочерние записи: вложения, ревизии, подстраницы и т.д. Аналог get_posts().
Хуков нет.
Возвращает
WP_Post[]|Массив[]|int[]. Массив объектов вложений или пустой массив.
Шаблон использования
$childrens = get_children( [
'post_parent' => 0,
'post_type' => 'any',
'numberposts' => -1,
'post_status' => 'any'
] );
if( $childrens ){
foreach( $childrens as $children ){
// вывод
}
}
Использование
get_children( $args, $output );
- $args(массив)
- Массив аргументов, определяющий получение данных в итоговый массив.
По умолчанию: предустановки - $output(константа)
- Константа, определяющая какого рода массив будет сформирован: OBJECT, ARRAY_A (ассоциативный), ARRAY_N (пронумерованный).
По умолчанию: OBJECT
Параметры аргумента $args
Полный список принимаемых параметров смотрите в описании get_posts().
Кроме этого списка параметров аргумента $args, можно использовать любой из параметров WP_Query.
- numberposts(число)
- Сколько дочерних записей получать. -1 — все.
По умолчанию: -1 - post_parent(число)
- ID поста, записи, страницы вложения (дочерние записи) которой нужно получить. 0 — получит вложения без родителя (не прикрепленные файлы); null — получит все вложения, не важно есть родитель или нет.
- post_type(строка)
- Тип записи который нужно получить:
attachment,page,revisionилиany- любой из указанных.
По умолчанию: any - post_status(строка)
- Получить записи по указанному статусу (значение из колонки post_status):
publish,draft,inheritилиany— любой из указанных.
По умолчанию: any - post_mime_type(строка)
- Полный или частичный mime тип:
image,video,video/mp4,audio.
По умолчанию: ''
Примеры
#1 Получим все прикрепленные файлы записи
$postid = 25; $attachments = get_children( array( 'post_type'=>'attachment', 'post_parent'=>$postid ) ); /* Получит: Array ( [7144] => WP_Post Object ( [ID] => 7144 [post_author] => 1 [post_date] => 2016-06-19 07:47:55 [post_date_gmt] => 2016-06-19 02:47:55 [post_content] => [post_title] => democracy-ico [post_excerpt] => [post_status] => inherit [comment_status] => open [ping_status] => closed [post_password] => [post_name] => democracy-ico [to_ping] => [pinged] => [post_modified] => 2016-06-19 07:47:55 [post_modified_gmt] => 2016-06-19 02:47:55 [post_content_filtered] => [post_parent] => 67 [guid] => /wp-content/uploads/2010/06/democracy-ico.png [menu_order] => 0 [post_type] => attachment [post_mime_type] => image/png [comment_count] => 0 [filter] => raw ) [5576] => WP_Post Object ( ... */
#2 Получим прикрепленные файлы записи по типу
Если нужно получить вложения и обработать их используем такой код:
$images = get_children( 'post_type=attachment&post_mime_type=image' );
$videos = get_children( 'post_type=attachment&post_mime_type=video/mp4' );
if( ! $images ) {
// нет вложений
}
else {
foreach ( $images as $attachment_id => $attachment ) {
echo wp_get_attachment_image( $attachment_id, 'full' );
}
}
// Если нет необходимости обрабатывать пустой результат:
foreach ( (array) $videos as $attachment_id => $attachment ) {
echo wp_get_attachment_link( $attachment_id );
} #3 Получим и выведем все картинки связанные с постом 740
$attachments = get_children( array(
'post_parent' => 740,
'order' => 'ASC',
'post_mime_type' => 'image',
'post_type' => 'attachment',
) );
if( $attachments ){
foreach( $attachments as $attachment ){
$image_src = wp_get_attachment_image_src( $attachment->ID, 'thumbnail' )[0] ?: wp_get_attachment_image_src( $attachment->ID, 'full' )[0];
$image_desc = $attachment->post_content ?: $attachment->post_title;
echo '<img src="'. $image_src .'" alt="'. esc_attr( $image_desc ) .'" class="current">';
}
}
else
echo 'Вложений нет'; #4 Покажем первую картинку связанную с постом
В примере ниже, индексы главного массива содержат ID картинок (но если мы не знаем ID как мы можем получить доступ к первой картинке? - это может оказаться неудобным). Код ниже показывает, как напрямую добраться до информации о картинке из массива $child_image. Используется в цикле.
$args = [ 'numberposts' => 1, 'order'=> 'DESC', 'post_mime_type' => 'image', 'post_parent' => $post->ID, 'post_type' => 'attachment' ]; $children = get_children( $args ); // returns an array with keys: [ $image_ID ] $first_image = reset( $children ); // get first element print_r( $first_image ); // Let's display the data array on the screen. echo $first_image->ID; // gets the image ID
#5 Подстановочный знак в параметре post_mime_type
Этот пример показывает, как в параметре 'post_mime_type' использовать подстановочный знак %, который работает как % в SQL запросе LIKE (комбинация любых символов).
$children = get_children( array( 'post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'audio/%' ) );
#6 Блок навигации под древовидной записью
Навигация выводится так, что показаны все записи на одном уровне и один уровень дочерних записей к текущей.
/**
* Выводит блок навигации под древовидной записью.
*
* Навигация выводится так, что показаны все записи на одном уровне и один уровень дочерних записей к текущей.
*
* @return string HTML код блока со ссылками.
*/
function handbook_nav_block() {
// выходим если это не тип записи 'handbook'
if( ! is_singular('handbook') ) return;
global $post;
// соберем все ID
$include = [ $post->ID ];
// родители
$include = array_merge( $include, $post->ancestors );
$arr = [
'post_type' => $post->post_type,
//'post_status' => 'any',
//'orderby' => 'menu_order',
//'order' => 'ASC',
];
// соседи
$siblings = get_children( $arr + ['post_parent' => $post->post_parent] );
foreach( (array) $siblings as $pst ){
$include[] = $pst->ID;
// Дочерние страницы у всех записей на одном уровне с текущей, только если это не верхний уровень.
/*
if( $pst->post_parent !== 0 ){
if( $subchilds = get_children( $arr + ['post_parent' => $pst->ID] ) )
foreach( (array) $subchilds as $pst ) $include[] = $pst->ID;
}
*/
}
// соберем все дочерние
$childs = get_children( $arr + ['post_parent' => $post->ID] );
foreach( (array) $childs as $pst ){
$include[] = $pst->ID;
}
$children = wp_list_pages([ 'include'=>$include, 'post_type'=>'handbook', 'title_li'=>'', 'echo'=>0 ]);
return '
<style>
.handbook__nav{ background: #eee; padding: .8em 2.5rem; margin: 2em -2.5rem; }
.handbook__nav .title{ margin:.3em 0 .7em; }
.handbook__nav .current_page_item > a{ font-weight:bold; }
.handbook__nav ul ul{ margin-left:0; }
.handbook__nav ul.children{ margin-top:.5em; }
</style>
<div class="handbook__nav">
<h3 class="title">Навигация по разделу</h3>
<ul>
'. $children .'
</ul>
</div>';
}
Заметки
- Смотрите: get_posts()
- Global. WP_Post.
$postGlobal post object.
Список изменений
| С версии 2.0.0 | Введена. |