This is a function I use to add a wrapper to each image. I know it’s not 100% what you want, but I thought this might give you a handle to work from.
function add_image_wrapper( $content ) {
$content = preg_replace_callback( '/<img[^>]+>/im', function ( $matches ) {
$image = $matches[0];
$classes = array();
preg_match( '/class="align([^"]+)"/im', $image, $classes );
$align = ( ! empty( $classes ) ? $classes[1] : null );
$class="";
if ( in_array( $align, array( 'left', 'right' ) ) ) {
$class="media--align-" . $align;
}
return sprintf(
'<div class="media %s">%s</div>',
$class, $image
);
}, $content );
// Remove unnecessary classes from media-wrappers inside figures
$content = preg_replace_callback( '/<figure[^>]+>.+<\/figure>/im', function ( $matches ) {
$figure = $matches[0];
return preg_replace( '/class="media[^"]+"/im', 'class="media"', $figure );
}, $content );
return $content;
}
add_filter( 'the_content', 'add_image_wrapper', 99, 1 );