Inventory_Presser_Admin_Photo_Arranger::remove_attachment_from_gallery( mixed $post_id, mixed $parent_id )
remove_attachment_from_gallery
Parameters Parameters
- $post_id
-
(mixed) (Required)
- $parent_id
-
(mixed) (Required)
Return Return
(void)
Source Source
File: includes/admin/class-admin-photo-arranger.php
protected function remove_attachment_from_gallery( $post_id, $parent_id ) {
$attachment = get_post( $post_id );
// Is this attachment an image?
if ( ! wp_attachment_is_image( $attachment ) ) {
// No.
return;
}
// Is this new attachment even attached to a post?
$parent = get_post( $parent_id );
// Is the new attachment attached to a vehicle?
if ( empty( $parent->post_type ) || INVP::POST_TYPE !== $parent->post_type ) {
// Parent post isn't a vehicle.
return;
}
// Does the post content of the vehicle have a Gallery with a specific CSS class?
$blocks = parse_blocks( $parent->post_content );
foreach ( $blocks as $index => $block ) {
// Is this a core gallery block? With a specific CSS class?
if ( ! $this->is_gallery_block_with_specific_css_class( $block ) ) {
continue;
}
// Does the block already have this attachment ID? Remove it.
if ( ! empty( $block['innerBlocks'] )
&& $this->inner_blocks_contains_id( $block, $post_id ) ) {
$inner_block_count = count( $block['innerBlocks'] );
for ( $b = 0; $b < $inner_block_count; $b++ ) {
if ( $post_id === $block['innerBlocks'][ $b ]['attrs']['id'] ) {
unset( $block['innerBlocks'][ $b ] );
$block['innerBlocks'] = array_values( $block['innerBlocks'] );
break;
}
}
}
if ( null !== $block['innerContent'][0] ) {
// Change a CSS class to reflect the number of photos in the Gallery.
$block['innerContent'][0] = preg_replace(
'/ columns-[0-9]+/',
' columns-' . count( $block['innerBlocks'] ) ?? 0,
$block['innerContent'][0],
2
);
// Remove a list item HTML that renders the image in the gallery.
$pattern = sprintf(
'/<!-- wp:image {"id":%1$d,"sizeSlug":"large","linkDestination":"none"} -->'
. "[\r\n]*"
. '<figure class="wp-block-image size-large"><img src="[^"]+" alt="" class="wp-image-%1$d"\/><\/figure>'
. "[\r\n]*"
. '<!-- /wp:image -->/',
$post_id
);
$block['innerContent'][0] = preg_replace(
$pattern,
'',
$block['innerContent'][0]
);
}
// Update the block in the $blocks array.
$blocks[ $index ] = $block;
// and then update the post.
$parent->post_content = serialize_blocks( $blocks );
$this->safe_update_post( $parent );
break;
}
}
Expand full source codeCollapse full source codeView on Github