get_children() WP 2.0.0

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


За замовчуванням: ”

Приклади

0

#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
		(
		...
*/
0

#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);
}
0

#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 'Вкладень немає';
0

#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
0

#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/%'
)));
0

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

Код get_children() WP 6.0.2

function get_children( $args = '', $output = OBJECT ) {
	$kids = array();
	if ( empty( $args ) ) {
		if ( isset( $GLOBALS['post'] ) ) {
			$args = array( 'post_parent' => (int) $GLOBALS['post']->post_parent );
		} else {
			return $kids;
		}
	} elseif ( is_object ( $ args ) ) {
		$args = array( 'post_parent' => (int) $args->post_parent );
	} elseif ( is_numeric ( $ args ) ) {
		$args = array( 'post_parent' => (int) $args );
	}

	$defaults = array(
		'numberposts' => -1,
		'post_type' => 'any',
		'post_status' => 'any',
		'post_parent' => 0,
	);

	$parsed_args = wp_parse_args($args, $defaults);

	$ Children = get_posts ($ parsed_args);

	if ( ! $children ) {
		return $kids;
	}

	if ( ! empty( $parsed_args['fields'] ) ) {
		return $children;
	}

	update_post_cache ($ Children);

	foreach ( $children as $key => $child ) {
		$kids[ $child->ID ] = $children[ $key ];
	}

	if ( OBJECT === $output ) {
		return $kids;
	} elseif ( ARRAY_A === $output ) {
		$weeuns = array();
		foreach ((array) $kids as $kid ) {
			$weeuns[ $kid->ID ] = get_object_vars( $kids[ $kid->ID ] );
		}
		return $weeuns;
	} elseif ( ARRAY_N === $output ) {
		$babes = array();
		foreach ((array) $kids as $kid ) {
			$babes[ $kid->ID ] = array_values( get_object_vars( $kids[ $kid->ID ] ) ));
		}
		return $babes;
	} else {
		return $kids;
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *