get_post_gallery_images() WP 3.6.0

Повертає всі URL-адреси картинок першої галереї із зазначеного тексту запису (поста), якщо галерея в тексті є.

Є схожа функція get_post_galleries_images() , яка отримує всі галереї, а не лише першу.

Отримує URL зображення мініатюр, а не повних розмірів.

Не працює із блоковим редактором (Гутенберг). Працює лише для шоткоду .

Працює на основі:
get_post_gallery()
1 раз – 0.0064108 сек
(дуже повільно) | 50000 разів – 81.22 сек
(дуже повільно) |
PHP 7.3.12, WP 5.3.2

Хуків немає.

Повертає

Строку[]. Список URL картинок галереї, як вони вказані в шоткоді .

Використання

get_post_gallery_images($post);
$post
(число/WP_Post)
ID/об’єкт запису на посилання картинок галерей якої потрібно отримати.


За замовчуванням: поточний пост

Приклади

0

#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
)
*/
0

#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 [];
}

нотатки

список змін

З версії 3.6.0Введено.

Код get_post_gallery_images() WP 6.0.2

function get_post_gallery_images( $post = 0 ) {
	$ Gallery = get_post_gallery ($ Post, false);
	return empty( $gallery['src'] ) ? array() : $gallery['src'];
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *