get_post_gallery_images()
Возвращает все URL картинок первой галереи из указанного текста записи (поста), если галерея в тексте есть.
Есть похожая функция get_post_galleries_images(), которая получает все галереи, а не только первую.
Получает URL картинок миниатюр, а не полных размеров.
Не работает с блочным редактором (Гутенберг). Работает только для шоткода [gallery].
Работает на основе: get_post_gallery()
1 раз — 0.0064108 сек (очень медленно) | 50000 раз — 81.22 сек (очень медленно) | PHP 7.3.12, WP 5.3.2
Хуков нет.
Возвращает
Строку[]
. Список URL картинок галереи, в порядке, как они указаны в шоткоде [gallery]
.
Использование
get_post_gallery_images( $post );
- $post(число/WP_Post)
- ID/объект записи в ссылки картинок галерей которой нужно получить.
По умолчанию: текущий пост
Примеры
#1 Получим список всех SRC картинок из первой галереи поста 2179
$gal = get_post_gallery_images(2179); /* $gal будет содержать Array ( [0] => http://wp-kama.ru/wp-content/uploads/2016/02/image12-80x80.png [1] => http://wp-kama.ru/wp-content/uploads/2016/02/image11-80x80.png [2] => http://wp-kama.ru/wp-content/uploads/2016/02/image10-80x80.png ) */
#2 Получим список всех SRC картинок из первой галереи поста в редакторе Гутенберг
В блочном редакторе (Гутенберг) галерея имеет другой вид - не шорткод, поэтому функция get_post_gallery_images() вернет пустой массив.
Эта проблема известна и описана в тикете #43826, но решение станет частью ядра лишь только в будущем, точной даты нет.
Временное решение:
/** * Возвращает все URL картинок первой галереи из указанного текста записи. * Вернёт результат, если галлерея есть и вставлена как блок (Гутенберг). * * @param int|WP_Post $post * * @return array */ function get_post_block_gallery_images( $post = 0 ) { $post = get_post( $post ); // Запись не нашлась - возвращаем пустой массив if ( ! is_a( $post, 'WP_Post' ) ) { return []; } // Блок "Галерея" не нашелся - возвращаем пустой массив if ( ! has_block( 'gallery', $post->post_content ) ) { return []; } // Ищем все блоки в контенте $post_blocks = parse_blocks( $post->post_content ); // Перебираем все блоки в поисках нужного foreach ( $post_blocks as $block ) { // Ищем блок "Галерея" с переданными ID изображений if ( $block['blockName'] === 'core/gallery' && ! empty( $block['attrs']['ids'] ) ) { return array_map( function ( $image_id ) { // Получаем ссылку на оригинал изображения return wp_get_attachment_image_url( $image_id, 'full' ); }, $block['attrs']['ids'] ); } } // Если блок "Галерея" не нашелся - возвращаем пустой массив return []; }
Заметки
- Смотрите: get_post_gallery()
Список изменений
С версии 3.6.0 | Введена. |
Код get_post_gallery_images() get post gallery images WP 6.5.2
function get_post_gallery_images( $post = 0 ) { $gallery = get_post_gallery( $post, false ); return empty( $gallery['src'] ) ? array() : $gallery['src']; }