get_children() — функция для получения дочерних постов, страниц, либо прикрепленных к посту файлов

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Начну с того, что функция get_children() ну очень часто встречается в различных примерах — как в буржунете, так и в русскоязычном сегменте (как известно, большинство русских блоггеров как раз таки и берут оттуда весь код вдохновение).

Поэтому я и решил подробно остановиться на описании этой функции (а ещё в связи с нехваткой времени на написание объемных постов с собственными исследованиями).

get_children($args = '', $output = OBJECT)
$args
Подойдёт любой параметр функции get_posts(). Если не указан, то будут задействованы следующие значения по умолчанию:

$parametry = array(
	'numberposts' => -1, // количество выводимых постов - все
	'post_type' => 'any', // тип поста - любой
	'post_status' => 'any', // статус поста - любой
	'post_parent' => $GLOBALS['post']->post_parent // значение ID родительского элемента будет взято из $GLOBALS['post']
);

Как видите, данные значения параметров по умолчанию отличаются от значений get_posts().

Если же вы не указали собственные $args и при этом $GLOBALS['post'] тоже не существует, тогда функция возвратит пустой массив.

Также в официальном кодексе WordPress говорится, что с версии 2.6 вы обязаны указывать параметр post_type отличный от any, но я пока что не обнаружил подтверждение этой информации.

$output
Функция get_children() возвращает массив, а этот её параметр позволяет указать, из чего конкретно должен он состоять:

  • OBJECT — из объектов постов.
  • ARRAY_A — из ассоциативных массивов, где ключами являются ID элементов.
  • ARRAY_N — из нумерованных массивов.
$parametry = array(
	'numberposts' => -1, // количество выводимых постов - все
	'post_type' => 'any', // тип поста - любой
	'post_status' => 'any', // статус поста - любой
	'post_parent' => $GLOBALS['post']->post_parent // значение ID родительского элемента будет взято из $GLOBALS['post']
);

Как видите, данные значения параметров по умолчанию отличаются от значений get_posts().

Если же вы не указали собственные $args и при этом $GLOBALS['post'] тоже не существует, тогда функция возвратит пустой массив.

Также в официальном кодексе WordPress говорится, что с версии 2.6 вы обязаны указывать параметр post_type отличный от any, но я пока что не обнаружил подтверждение этой информации.

Так как, функция get_children() является частным случаем функции get_posts(), то тут моё описание этой функции заканчивается и я перехожу к примерам.

Пример 1. Получение первого изображения, загруженного к посту, в случае, если отсутствует миниатюра.

Почему-то в классическом варианте данного примера значением второго аргумента функции get_children() выставляется OBJECT, затем для результата функции запускается foreach… На мой взгляд — чем меньше циклов в коде, тем лучше, кроме того, зачем запускать циклы для массивов из одного элемента?

Давайте посмотрим на оптимальный код. Всё, что нам потребуется, это функции:

if( has_post_thumbnail() ) { // проверяем
	the_post_thumbnail( 'full' ); // если да - выводим
} else { // если нет
	$parametry = array(
		'numberposts' => 1, // нам нужно только одно изображение
		'order'=> 'ASC', // по возрастанию
		'orderby' => 'menu_order', // по умолчанию изображения сортируются по дате, а в данном случае - по порядку, установленному в админке
		'post_type' => 'attachment', // тип поста - вложение
		'post_mime_type' => 'image', // тип вложения - изображение
		'post_parent' => $post->ID, // тут указываем ID родительского поста, в данном примере - текущий пост
 
	);
	$izobrazhenija = get_children( $parametry, ARRAY_A );
	$izobrazhenija2 = array_values( $izobrazhenija); 
	$pervoe = wp_get_attachment_image_src( $izobrazhenija2[0]['ID'], 'full' );
	echo '<img src="' . $pervoe[0] . '" />';
}

Пример 2. Слайдер из изображений.

О том, как создать слайдер из изображений поста, читайте тут.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии