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 | Введено. |