add_filter( 'the_content', 'attachment_image_link_remove_filter' );
function attachment_image_link_remove_filter( $content ) {
$content =
preg_replace(
array('{<a(.*?)(wp-att|wp-content\/uploads)[^>]*><img}',
'{ wp-image-[0-9]*" /></a>}'),
array('<img','" />'),
$content
);
return $content;
}
The regex could be simpler and unfortunately this also deprives you of the unique wp-image-xxx
(where xxx is the attachment ID) class of the <img>
tag, but it’s the safest one I could come up with to only remove links around attachment images and leave in-text links as well as links around non-attachment images intact.
If you don’t care about non-attachment images and want all images within the post content to not be wrapped in links anyway, this should suffice:
function attachment_image_link_remove_filter( $content ) {
$content =
preg_replace(array('{<a[^>]*><img}','{/></a>}'), array('<img','/>'), $content);
return $content;
}
I can see it breaking things though, if the inside of an anchor ends in some other self-closing element, such as a <br />
tag. That would be rare, obviously, but I’d recommend using the first, though longer version.