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

Начну с того, что функция 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 — из нумерованных массивов.

Так как, функция 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. Слайдер из изображений.

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

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

  • dontfear26 июня 2015 в 19:06 #

    Спасибо, попробую с помощью этого скрипта организовать вывод первого изображения в ogp разметке.

  • Sergey Zhukov11 августа 2015 в 18:08 #

    Приветствую. Случайно набрел на Ваш форум. Есть интересная информация, спасибо!
    К первому примеру рискну предложить поправку, на случай если и прикрепленных картинок тоже нет:

        $izobrazhenija = get_children( $parametry, ARRAY_A );
        if ( null !== $pervoe = array_shift( $izobrazhenija ) )
        {
            echo get_the_post_thumbnail( $pervoe['ID'], 'full' );
        }

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

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.