Media: Add support for v1 and v2 gallery block in `get_post_galleries()`.
The `get_post_galleries()` function only handled galleries from the `[gallery]` shortcode. It did not process gallery blocks. Introducing v1 and v2 gallery block support in `get_post_galleries()` including support for innerblock nesting. There are no changes to how the function is called. It detects if the post content has one or more gallery blocks. If detected, it parses the blocks and then processes to add each gallery block's HTML to the array of galleries before being passed through the filter and returned. Includes integration tests. Follow-up to [24682], [43309], [48262], [52042]. Props glendaviesnz, costdev, antpb, audrasjb, birgire, celloexpressions, desrosj, hellofromTonya, jeffpaul, lynk, pento, ramonopoly, russhylov, takahashi_fumiki, tellyworth. Fixes #43826. Built from https://develop.svn.wordpress.org/trunk@52190 git-svn-id: http://core.svn.wordpress.org/trunk@51782 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
09b9af2c76
commit
4586cfe5a0
|
@ -4725,7 +4725,7 @@ function get_post_galleries( $post, $html = true ) {
|
|||
return array();
|
||||
}
|
||||
|
||||
if ( ! has_shortcode( $post->post_content, 'gallery' ) ) {
|
||||
if ( ! has_shortcode( $post->post_content, 'gallery' ) && ! has_block( 'gallery', $post->post_content ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
@ -4767,6 +4767,95 @@ function get_post_galleries( $post, $html = true ) {
|
|||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// All blocks nested inside non-Gallery blocks should be in the root array.
|
||||
if ( $has_inner_blocks && 'core/gallery' !== $block['blockName'] ) {
|
||||
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;
|
||||
}
|
||||
|
||||
// Otherwise, 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 the list of all found galleries in the given post.
|
||||
*
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '5.9-alpha-52189';
|
||||
$wp_version = '5.9-alpha-52190';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
|
Loading…
Reference in New Issue