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. $post Global post object.
Список изменений
С версии 2.0.0 | Введена. |