get_post_galleries() WP 3.6.0

Отримує всі галереї з тексту вказаного запису/поста. Шукає шорткоди у тексті, обробляє їх та повертає масив даних картинок галерей.

Коли потрібно отримати лише першу галерею, використовуйте get_post_gallery() .

З версії WordPress 5.9 ця функція підтримує галереї блокового редактора (Гутенберг).

Працює на основі:
has_shortcode() ,
do_shortcode_tag() ,
get_shortcode_regex()
1 раз – 0.009364 сек
(дуже повільно) | 50000 разів – 538.27 сек
(гальмо) |
PHP 7.0.4, WP 4.4.2

Хуки з функції

Повертає

Массив. Список картинок галереї або кількох галерей. Якщо параметр $html=true то масив міститиме готовий HTML код кожної галереї.

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

get_post_galleries($post, $html);
$post
(число/WP_Post) (обов’язковий)
ID або об’єкт запису, в тексті якого потрібно знайти галереї.
$html
(логічний)
У даних повертати готовий HTML галереї або дані галереї у вигляді ID вкладень та посилань на картинки.


Типово: true

Приклади

0

#1 Отримаємо всі галереї запису 2179

Цей приклад показує, як працює функція. Передбачається, що в тексті запису 2179 присутні 2 галереї – 2 шорткоду :

$gal = get_post_galleries(2179, false);

/* $gal дорівнюватиме
Array
(
	[0] => Array
		(
			[ids] => 6790,6789,6788
			[src] => 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
				)

		)

	[1] => Array
		(
			[ids] => 6762,6761,6760
			[src] => Array
				(
					[0] => http://wp-kama.ru/wp-content/uploads/2016/02/image008-80x80.jpg
					[1] => http://wp-kama.ru/wp-content/uploads/2016/02/image007-80x80.jpg
					[2] => http://wp-kama.ru/wp-content/uploads/2016/02/image006-80x80.jpg
				)

		)

)
*/

$gal = get_post_galleries(25, true);

/*$gal дорівнюватиме
Array
(
	[0] => <div id='gallery-3' class='gallery galleryid-19 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>
			<div class='gallery-icon landscape'>
				<a href='/article/sajt-na-konstruktore-wix/image12'><img width="80" height="80" src="/wp-content/uploads/2016/02/image12-80x80.png " class="attachment-thumbnail size-thumbnail" alt="image12" /></a>
			</div></figure><figure class='gallery-item'>
			<div class='gallery-icon landscape'>
				<a href='/article/sajt-na-konstruktore-wix/image11'><img width="80" height="80" src="/wp-content/uploads/2016/02/image11-80x80.png " class="attachment-thumbnail size-thumbnail" alt="image11" /></a>
			</div></figure><figure class='gallery-item'>
			<div class='gallery-icon landscape'>
				<a href='/article/sajt-na-konstruktore-wix/image10'><img width="80" height="80" src="/wp-content/uploads/2016/02/image10-80x80.png " class="attachment-thumbnail size-thumbnail" alt="image10" /></a>
			</div></figure>
		</div>

	[1] => <div id='gallery-4' class='gallery galleryid-19 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>
			<div class='gallery-icon landscape'>
				<a href='/article/sajt-na-konstruktore-wix/image008'><img width="80" height="80" src="/wp-content/uploads/2016/02/image008-80x80.jpg " class="attachment-thumbnail size-thumbnail" alt="image008" /></a>
			</div></figure><figure class='gallery-item'>
			<div class='gallery-icon landscape'>
				<a href='/article/sajt-na-konstruktore-wix/image007'><img width="80" height="80" src="/wp-content/uploads/2016/02/image007-80x80.jpg " class="attachment-thumbnail size-thumbnail" alt="image007" /></a>
			</div></figure><figure class='gallery-item'>
			<div class='gallery-icon landscape'>
				<a href='/article/sajt-na-konstruktore-wix/image006'><img width="80" height="80" src="/wp-content/uploads/2016/02/image006-80x80.jpg " class="attachment-thumbnail size-thumbnail" alt="image006" /></a>
			</div></figure>
		</div>

)
*/

список змін

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

Код get_post_galleries() WP 6.0.2

function get_post_galleries( $post, $html = true ) {
	$post = get_post($post);

	if (! $post) {
		return array();
	}

	if ( ! has_shortcode( $post->post_content, 'gallery' ) && ! has_block( 'gallery', $post->post_content ) ) {
		return array();
	}

	$ galleries = array ();
	if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $post->post_content, $matches, PREG_SET_ORDER ) ) {
		foreach ( $matches as $shortcode ) {
			if ( 'gallery' === $shortcode[2] ) {
				$ srcs = array ();

				$shortcode_attrs = shortcode_parse_atts( $shortcode[3] );
				if ( ! is_array( $shortcode_attrs ) ) {
					$shortcode_attrs = array();
				}

				// Відомості про post ID з галереї ми бачимо, якщо шорсткий код не означає, що інший post already.
				if ( ! isset( $shortcode_attrs['id'] ) ) {
					$shortcode[3] .= ' id="' . (int) $post->ID . '"';
				}

				$gallery = do_shortcode_tag( $shortcode );
				if ($html) {
					$galleries[] = $gallery;
				} else {
					preg_match_all( '#src=(['"])(.+?)1#is', $gallery, $src, PREG_SET_ORDER );
					if ( ! empty( $src ) ) {
						foreach ( $src as $s ) {
							$srcs[] = $s[2];
						}
					}

					$galleries[] = array_merge(
						$shortcode_attrs,
						array(
							'src' => array_values( array_unique( $srcs ) ),
						)
					);
				}
			}
		}
	}

	if ( has_block( 'gallery', $post->post_content ) ) {
		$post_blocks = parse_blocks( $post->post_content );

		while ( $block = array_shift( $post_blocks ) ) {
			$has_inner_blocks = ! empty( $block['innerBlocks'] );

			// Skip blocks with no blockName and no innerHTML.
			if ( ! $block['blockName'] ) {
				continue;
			}

			// Skip non-Gallery blocks.
			if ( 'core/gallery' !== $block['blockName'] ) {
				// Move inner blocks в root array до skipping.
				if ( $has_inner_blocks ) {
					array_push( $post_blocks, ...$block['innerBlocks'] );
				}
				continue;
			}

			// New Gallery block format as HTML.
			if ( $has_inner_blocks && $html ) {
				$block_html = wp_list_pluck( $block['innerBlocks'], 'innerHTML' );
				$galleries[] = '<figure>' . implode('', $block_html). '</figure>';
				continue;
			}

			$ srcs = array ();

			// New Gallery block format as an array.
			if ( $has_inner_blocks ) {
				$attrs = wp_list_pluck( $block['innerBlocks'], 'attrs' );
				$ids = wp_list_pluck( $attrs, 'id' );

				foreach ( $ids as $id ) {
					$url = wp_get_attachment_url($id);

					if ( is_string( $url ) && ! in_array( $url, $srcs, true ) ) {
						$srcs[] = $url;
					}
				}

				$galleries[] = array(
					'ids' => implode( ',', $ids ),
					'src' => $srcs,
				);

				continue;
			}

			// Old Gallery block format as HTML.
			if ($html) {
				$galleries[] = $block['innerHTML'];
				continue;
			}

			// Old Gallery block format as an array.
			$ids = ! empty( $block['attrs']['ids'] ) ? $block['attrs']['ids'] : array();

			// If present, use the image IDs from the JSON blob as canonical.
			if ( ! empty( $ids ) ) {
				foreach ( $ids as $id ) {
					$url = wp_get_attachment_url($id);

					if ( is_string( $url ) && ! in_array( $url, $srcs, true ) ) {
						$srcs[] = $url;
					}
				}

				$galleries[] = array(
					'ids' => implode( ',', $ids ),
					'src' => $srcs,
				);

				continue;
			}

			//Вінші, extract srcs from the innerHTML.
			preg_match_all( '#src=(['"])(.+?)1#is', $block['innerHTML'], $found_srcs, PREG_SET_ORDER );

			if ( ! empty( $found_srcs[0] ) ) {
				foreach ( $found_srcs as $src ) {
					if ( isset( $src[2] ) && ! in_array( $src[2], $srcs, true ) ) {
						$srcs[] = $src[2];
					}
				}
			}

			$galleries[] = array( 'src' => $srcs );
		}
	}

	/**
	 * Filters list всіх загальних галерей в given post.
	 *
	 * @ Since 3.6.0
	 *
	 * @param array $galleries Associative array all found post galleries.
	 * @param WP_Post $post Post об'єкт.
	 */
	return apply_filters( 'get_post_galleries', $galleries, $post);
}

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

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