diff --git a/src/wp-includes/media.php b/src/wp-includes/media.php index a0e7ef9c6c..260db26cac 100644 --- a/src/wp-includes/media.php +++ b/src/wp-includes/media.php @@ -1843,6 +1843,17 @@ function wp_filter_content_tags( $content, $context = null ) { $filtered_image = wp_img_tag_add_loading_attr( $filtered_image, $context ); } + /** + * Filters an img tag within the content for a given context. + * + * @since 6.0.0 + * + * @param string $filtered_image Full img tag with attributes that will replace the source img tag. + * @param string $context Additional context, like the current filter name or the function name from where this was called. + * @param int $attachment_id The image attachment ID. May be 0 in case the image is not an attachment. + */ + $filtered_image = apply_filters( 'wp_content_img_tag', $filtered_image, $context, $attachment_id ); + if ( $filtered_image !== $match[0] ) { $content = str_replace( $match[0], $filtered_image, $content ); } diff --git a/tests/phpunit/tests/media.php b/tests/phpunit/tests/media.php index 5d92d9718b..88a402e298 100644 --- a/tests/phpunit/tests/media.php +++ b/tests/phpunit/tests/media.php @@ -2293,6 +2293,17 @@ EOF; $this->assertSame( $img, wp_filter_content_tags( $img ) ); } + /** + * @ticket 55347 + */ + public function test_wp_filter_content_tags_has_filter() { + $filter = new MockAction(); + add_filter( 'wp_content_img_tag', array( &$filter, 'filter' ) ); + $img_tag_1 = get_image_tag( self::$large_id, '', '', '', 'medium' ); + + wp_filter_content_tags( $img_tag_1 ); + $this->assertSame( 1, $filter->get_call_count() ); + } /** * @ticket 33641 * @ticket 34528