问题描述

我正在寻找一种从帖子内容的图像中删除附件链接的方法。

我想添加到我的主题的 functions.php 。我知道你可以在每个图像的基础上禁用这个,但我想在我的 functions.php 页面中这样做一次。有任何想法吗?

谢谢,巴特

最佳解决方案

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;
}

正则表达式可能更简单,不幸的是,这也剥夺了<img> 标签的独特的 wp-image-xxx(其中 xxx 是附件 ID) 类,但它是最安全的,只能删除附件图像上的链接,并离开 in-text 链接以及完整的 non-attachment 图像链接。

如果您不关心 non-attachment 图像,并希望邮件内容中的所有图像都不会包含在链接中,那么这应该是足够的:

function attachment_image_link_remove_filter( $content ) {
    $content =
        preg_replace(array('{<a[^>]*><img}','{/></a>}'), array('<img','/>'), $content);
    return $content;
}

如果锚的内部结束于其他一些 self-closing 元素 (如<br /> 标记),我可以看到它破坏了事情。这很罕见,显然,但我建议使用第一个,虽然更长的版本。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。