Функция get_post_gallery_images()
в WordPress используется для извлечения URL изображений из первой галереи, указанной в содержимом записи. Это удобный способ получить ссылки на изображения, если в записи присутствует шорткод gallery
, и вам нужны только изображения из первой галереи.
get_post_gallery_images( int|WP_Post $post ): string[]
Параметры
- $post (опциональный): ID записи (int) или объект записи (WP_Post), из которой нужно получить галерею. Если параметр не указан, используется текущая запись (глобальная переменная
$post
).
Возвращаемое значение
Функция возвращает массив строк, где каждая строка — это URL изображения из первой найденной галереи. Если галерей нет, возвращается пустой массив.
Важные моменты
get_post_gallery_images()
возвращает только URL миниатюр изображений.- Функция работает только с галереями, созданными через шорткод
gallery
. Для галерей, созданных через редактор блоков (Гутенберг), функция не сработает. - Если в записи несколько галерей, функция вернет изображения только из первой.
Пример 1: Получение URL всех изображений из первой галереи
Допустим, у нас есть запись с ID 4521, и в ней есть несколько галерей. Мы хотим получить URL изображений только из первой галереи.
$first_gallery_images = get_post_gallery_images(4521);
if (!empty($first_gallery_images)) {
echo '<ul>';
foreach ($first_gallery_images as $image_url) {
echo '<li><img src="' . esc_url($image_url) . '" alt="Gallery image"></li>';
}
echo '</ul>';
} else {
echo 'В записи нет галерей или галерея отсутствует.';
}
/* Пример данных, которые может вернуть $first_gallery_images:
Array
(
[0] => http://example.com/wp-content/uploads/2024/06/image1-80x80.jpg
[1] => http://example.com/wp-content/uploads/2024/06/image2-80x80.jpg
[2] => http://example.com/wp-content/uploads/2024/06/image3-80x80.jpg
)
*/
Пример 2: Добавление URL изображений в конец контента записи
Этот пример демонстрирует, как можно модифицировать контент записи, добавляя в него список изображений из первой галереи.
function append_first_gallery_images_to_content($content) {
global $post;
// Выполняем только для одиночных записей.
if (!is_singular()) {
return $content;
}
// Проверяем, есть ли в записи шорткод .
if (!has_shortcode($post->post_content, 'gallery')) {
return $content;
}
// Получаем изображения из первой галереи.
$first_gallery_images = get_post_gallery_images($post);
if (!empty($first_gallery_images)) {
$image_list = '<ul>';
// Проходим по каждому изображению и добавляем его в список.
foreach ($first_gallery_images as $image_url) {
$image_list .= '<li><img src="' . esc_url($image_url) . '" alt="Gallery image"></li>';
}
$image_list .= '</ul>';
// Добавляем список в конец контента записи.
$content .= $image_list;
}
return $content;
}
add_filter('the_content', 'append_first_gallery_images_to_content');
Пример 3: Получение изображений первой галереи в записи с блоком Гутенберг
Поскольку get_post_gallery_images()
не работает с галереями, созданными через Гутенберг, можно использовать альтернативное решение для получения изображений из галереи, созданной как блок:
function get_block_gallery_images($post_id = 0) {
$post = get_post($post_id);
// Если запись не найдена, возвращаем пустой массив.
if (!is_a($post, 'WP_Post')) {
return [];
}
// Проверяем наличие блоков галереи в контенте.
if (!has_block('gallery', $post->post_content)) {
return [];
}
// Разбираем блоки контента.
$post_blocks = parse_blocks($post->post_content);
// Ищем блок галереи и извлекаем ID изображений.
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 [];
}
$block_gallery_images = get_block_gallery_images(5250);
if (!empty($block_gallery_images)) {
echo '<ul>';
foreach ($block_gallery_images as $image_url) {
echo '<li><img src="' . esc_url($image_url) . '" alt="Gallery image"></li>';
}
echo '</ul>';
} else {
echo 'Галерея не найдена или она создана с помощью другого блока.';
}
Пример 4: Использование функции для вывода первой галереи из текущей записи
Если вы хотите выводить изображения из первой галереи для текущей записи (например, на странице одного поста), используйте следующий код:
if (is_single()) {
$gallery_images = get_post_gallery_images();
if (!empty($gallery_images)) {
echo '<ul>';
foreach ($gallery_images as $image_url) {
echo '<li><img src="' . esc_url($image_url) . '" alt="Gallery image"></li>';
}
echo '</ul>';
} else {
echo 'Галерея не найдена.';
}
}
Заключение
Функция get_post_gallery_images()
— это простой и удобный инструмент для получения URL изображений из первой галереи записи в WordPress. Она подходит для работы с классическими шорткодами gallery
, но если вы используете редактор блоков, вам придется искать альтернативные решения. Эта функция упрощает доступ к изображениям и позволяет их легко кастомизировать и выводить на сайте.