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… На мой взгляд — чем меньше циклов в коде, тем лучше, кроме того, зачем запускать циклы для массивов из одного элемента?

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

  • has_post_thumbnail() — для проверки, присвоена ли посту миниатюра,
  • the_post_thumbnail() — для вывода миниатюры,
  • wp_get_attachment_image_src() — для вывода URL картинки.
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. Слайдер из изображений.

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

Кодекс WordPress: Посты: add_post_type_support(), get_adjacent_post(), get_boundary_post(), get_children(), get_delete_post_link(), get_edit_post_link(), get_extended(), get_next_post(), get_next_posts_link(), get_page_by_path(), get_page_by_title(), get_permalink(), get_post(), get_post_type(), get_posts(), get_previous_post(), get_previous_posts_link(), get_the_author_posts(), get_the_content(), get_the_ID(), get_the_title(), has_excerpt(), has_post_thumbnail(), is_single(), post_class(), post_type_supports(), remove_post_type_support(), setup_postdata(), the_content(), the_ID(), the_permalink(), the_title(), the_title_attribute(), wp_count_posts (), wp_delete_post(), wp_get_post_categories(), wp_insert_post(), WP_Query, wp_reset_postdata(), wp_reset_query(), wp_set_post_tags(), wp_trash_post()

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий