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. Слайдер из изображений.

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

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 3

Комментирование этого поста более не доступно.
  • dontfear 26 июня 2015 #

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

  • Sergey Zhukov 11 августа 2015 #

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

        $izobrazhenija = get_children( $parametry, ARRAY_A );
        if ( null !== $pervoe = array_shift( $izobrazhenija ) )
        {
            echo get_the_post_thumbnail( $pervoe['ID'], 'full' );
        }
  • Константин 12 марта 2020 #

    Михаил, подскажите пожалуйста как узнать имя поста из любого места php в WP.
    При исполнении функции с хуком (загрузка страницы) использую

    $GLOBALS['post']->post_name

    для сравнения с названиями ярлыков страниц и при совпадении подгружать нужный файл PHP страницы.

    Но когда страница загружена, то ни один метод узнавания имени текущей страницы не работает при подгрузке AJAXом новой PHP страницы. То есть получается так:
    - клацаю по элементу список, обрабатываю AJAXом, и должен обратно выдать результат в зависимости от того, какая именно страница у пользователя открыта (что бы юзать одинаковую JS функцию на разных страницах), но из PHP файла вызываемого аяксом я не могу этого сделать. Вероятно необходимо какие-то файлы подключить??