Начну с того, что функция 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. Слайдер из изображений.
О том, как создать слайдер из изображений поста, читайте тут.