get_children

Получает дочерние записи: вложения, ревизии, подстраницы и т.д. Аналог get_posts().

Хуков нет.

Возвращает

Массив объектов вложений или false.

Использование

get_children( $args, $output );

Шаблон использования

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

if( $childrens ){
	foreach( $childrens as $children ){
		// вывод
	}
}
$args(массив)
Массив аргументов, определяющий получение данных в итоговый массив.
По умолчанию: по умолчанию
$output(константа)
Константа, определяющая какого рода массив будет сформирован: OBJECT, ARRAY_A (ассоциативный), ARRAY_N (пронумерованный).
По умолчанию: OBJECT

Параметры аргумента $args

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/mp4audio.
По умолчанию: ”
Полный список принимаемых параметров смотрите в описании get_posts().

Примеры

#1. Получим прикрепленные файлы записи

Если нужно получить вложения и обработать их используем такой код:

$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 );
}

#2. Получим и выведем все картинки связанные с постом 740

$args = array(
	'post_parent'    => 740,
	'order'          => 'ASC',
	'post_mime_type' => 'image',
	'post_type'      => 'attachment',
);

$attachments = get_children( $args );

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 'Вложений нет';

#3. Покажем первую картинку связанную с постом

В примере ниже, главный массив в индексах имеет ID картинок (но если мы не знает ID как мы может получить доступ к первой картинке? – это может оказаться неудобным). Код ниже показывает, как напрямую добраться до информации о картинке из массива $child_image. Используется в цикле.

$args = array(
	'numberposts' => 1,
	'order'=> 'DESC',
	'post_mime_type' => 'image',
	'post_parent' => $post->ID,
	'post_type' => 'attachment'
);

$get_children_array = get_children( $args, ARRAY_A );  // вернет массив с ключами: [$image_ID]... 
$rekeyed_array = array_values( $get_children_array ); // обнулим ключи
$child_image = $rekeyed_array[0]; // первая картинка из массива  

print_r( $child_image );    // Выведем данные массива на экран.
echo $child_image['ID'];    // Так получим ID картинки.

#4 Подстановочный знак в параметре post_mime_type

Этот пример показывает, как в параметре ‘post_mime_type’ использовать подстановочный знак %, который работает как % в SQL запросе LIKE (комбинация любых символов).

<?php
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,
	);

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

	$children = get_posts( $r );

	if ( ! $children )
		return $kids;

	if ( ! empty( $r['fields'] ) )
		return $children;

	update_post_cache($children);

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

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

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *