get_children()
Отримує дочірні записи: вкладення, ревізії, підсторінки тощо. Аналог get_posts() .
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 об’єкт.
список змін
З версії 2.0.0 | Введено. |