[wp-trac] [WordPress Trac] #55510: The `wp_content_img_tag` filter can appear to run twice when used to wrap image tags

WordPress Trac noreply at wordpress.org
Mon Apr 11 23:41:55 UTC 2022


#55510: The `wp_content_img_tag` filter can appear to run twice when used to wrap
image tags
------------------------------------------+-----------------------
 Reporter:  peterwilsoncc                 |       Owner:  flixos90
     Type:  defect (bug)                  |      Status:  assigned
 Priority:  normal                        |   Milestone:  6.0
Component:  Media                         |     Version:
 Severity:  normal                        |  Resolution:
 Keywords:  needs-patch needs-unit-tests  |     Focuses:
------------------------------------------+-----------------------

Comment (by flixos90):

 @peterwilsoncc @pbearne The problem indeed occurs when the exact same
 image tag is included in the content multiple times.

 This has not been a problem for WordPress core itself, since it will
 adjust the "duplicate" image tag in the same way. The following
 `str_replace()` (which by definition replaces all occurrences in the
 content) will technically not do anything since the unmodified image tag
 has already been replaced throughout the content before.

 When wrapping an image tag without further modifying it though, it means
 that even after the replacement the original image tag remains in the
 content, hence the duplicate filter run replaces it again (which in case
 of a filter that wants to wrap the image with `<span><img /></span>` will
 get `<span><span><img /></span></span>`.

 So while this is now a bug, it technically has always been a somewhat
 wasteful implementation, re-running the logic unnecessarily for duplicate
 instances of the same image tag. Fortunately there's an easy fix for it:
 We can simply unset the respective lookup key in the `$images` variable
 within `wp_filter_content_tags()` to not process the same tag again.

 Note that we should make the same fix for iframes. They don't have a
 filter so this is technically not a bug there, but still just as wasteful.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/55510#comment:3>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list