Начну с того, что функция get_children()
ну очень часто встречается в различных примерах — как в буржунете, так и в русскоязычном сегменте (как известно, большинство русских блоггеров как раз таки и берут оттуда весь код вдохновение).
Поэтому я и решил подробно остановиться на описании этой функции (а ещё в связи с нехваткой времени на написание объемных постов с собственными исследованиями).
get_children($args = '', $output = OBJECT)
$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()
возвращает массив, а этот её параметр позволяет указать, из чего конкретно должен он состоять:
OBJECT
— из объектов постов.ARRAY_A
— из ассоциативных массивов, где ключами являются ID элементов.ARRAY_N
— из нумерованных массивов.Так как, функция get_children()
является частным случаем функции get_posts(), то тут моё описание этой функции заканчивается и я перехожу к примерам.
Почему-то в классическом варианте данного примера значением второго аргумента функции 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] . '" />'; }
О том, как создать слайдер из изображений поста, читайте тут.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Спасибо, попробую с помощью этого скрипта организовать вывод первого изображения в ogp разметке.
Приветствую. Случайно набрел на Ваш форум. Есть интересная информация, спасибо!
К первому примеру рискну предложить поправку, на случай если и прикрепленных картинок тоже нет:
Михаил, подскажите пожалуйста как узнать имя поста из любого места php в WP.
При исполнении функции с хуком (загрузка страницы) использую
для сравнения с названиями ярлыков страниц и при совпадении подгружать нужный файл PHP страницы.
Но когда страница загружена, то ни один метод узнавания имени текущей страницы не работает при подгрузке AJAXом новой PHP страницы. То есть получается так:
- клацаю по элементу список, обрабатываю AJAXом, и должен обратно выдать результат в зависимости от того, какая именно страница у пользователя открыта (что бы юзать одинаковую JS функцию на разных страницах), но из PHP файла вызываемого аяксом я не могу этого сделать. Вероятно необходимо какие-то файлы подключить??