Получение изображений из галереи поста с функцией `get_post_gallery_images()`

Получение изображений из галереи поста с помощью функции 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. Она позволяет легко работать с изображениями в постах и на страницах вашего сайта.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *