Получение изображений из галереи поста с помощью функции get_post_gallery_images()
Функция get_post_gallery_images() предназначена для получения списка URL изображений, принадлежащих первой галерее указанного поста. Эта функция полезна, когда вам нужно отобразить изображения галереи на вашем сайте.
Что делает get_post_gallery_images()?
Она возвращает массив URL миниатюр изображений, а не полных изображений! Если вам нужны изображения из всех галерей поста, вы можете использовать другую функцию — get_post_galleries_images().
Примечание: Функция работает только с версиями WordPress начиная с 3.6.0.
Возвращаемое значение
Функция возвращает массив строк, где каждая строка — это ссылка на изображение в галерее.
Использование функции
Для использования функции вы можете вызвать её следующим образом:
$images = get_post_gallery_images( $post );
Параметры
$post(int | WP_Post): Идентификатор поста или объект WP_Post. По умолчанию используется глобальная переменная$post.
Примеры
Пример 1: Получение списка всех изображений из первой галереи поста
$gal = get_post_gallery_images(2179);
/* $gal будет содержать
Array
(
[0] => http://example.com/wp-content/uploads/2016/02/image12-80x80.png
[1] => http://example.com/wp-content/uploads/2016/02/image11-80x80.png
[2] => http://example.com/wp-content/uploads/2016/02/image10-80x80.png
)
*/
Пример 2: Получение изображений в редакторе блоков (Гутенберг)
В редакторе блоков(Гутенберг) галерея выглядит иначе, и функция get_post_gallery_images() вернёт пустой массив. Вот временное решение:
/**
* Возвращает все 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 ) {
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 [];
}
Пример 3: Добавление ссылок на изображения в содержимое поста
Вы можете дополнить содержимое поста ссылками на изображения из галереи следующим образом:
add_filter( 'the_content', 'wpdocs_show_gallery_image_urls' );
/**
* Показывает URL изображений под содержимым
*/
function wpdocs_show_gallery_image_urls( $content ) {
global $post;
// Делаем это только для одиночных записей
if( ! is_singular() )
return $content;
// Убедимся, что в посте есть галерея
if( ! has_shortcode( $post->post_content, 'gallery' ) )
return $content;
// Получаем первую галерею из поста
$gallery = get_post_gallery_images( $post );
$image_list = '';
// Перебираем каждое изображение в галерее
foreach( $gallery as $image_url ) {
$image_list .= '- ' . '
' . ' ';
}
$image_list .= '
';
// Добавляем наш список изображений к содержимому поста
$content .= $image_list;
return $content;
}
Заключение
Функция get_post_gallery_images() — это полезный инструмент для извлечения изображений из галерей в WordPress. Она позволяет легко работать с изображениями в постах и на страницах вашего сайта.