如何使用 preg_replace 将图像 link 作为 hyperlink 添加到内容中的所有图像?

How to add image link as hyperlink to all images in content using preg_replace?

我想将内容中 I post 的所有图像的 hyperlink 更改为图像 link。现在我可以使用

将其 link 编辑为任何内容
function add_image_responsive_class($content) {
   global $post;
   $pattern ="~<a .*?>\s*<img(.*?)class=\"(.*?)\"(.*?)>\s*</a>~i";
   $replacement = '<a href=""><imgclass=""></a>';
   $content = preg_replace($pattern, $replacement, $content);
   return $content;
}
add_filter('the_content', 'add_image_responsive_class');

但我无法将图像 link 复制到 hyperlink。

例如:

现在我有了这个:

<a href="http://www.mywebsite.com/mypage"><img src="imagelink"></a>

我想将其更改为:

<a href="imagelink"><img src="imagelink"></a>

好的,有几种方法可以做到这一点。我将向您展示一种简单的方法,但要知道您可以将其自定义到更细的粒度。不过过程是一样的。

基本上我们要将字符串分成块并通过在其周围放置一组括号来保存每个块。然后我们可以随意交换块。

让我们把你的字符串分成不同的部分。

<a href="http://www.mywebsite.com/mypage"><img src="imagelink"></a>
|---1---||---------------2-------------||-----3----||---4---||--5-|

我们真正想要做的是用#4 替换#2。所以顺序是:

#1 #4 #3 #4 #5

这很容易通过 preg_replace 实现,方法如下:

$link_text = '<a href="http://www.mywebsite.com/mypage"><img src="imagelink"></a>';

// JUST ADD PARENTHESIS AROUND EACH ITEM YOU WANT TO CAPTURE
$link_text = preg_replace('~(<a href=")(.*?)("><img src=")(.*?)("></a>)~i', '', $link_text);

print $link_text;

那给你以下:

<a href="imagelink"><img src="imagelink"></a>

话虽这么说,您真的可以随心所欲地分割字符串……不必像我那样做。这个概念是一样的。每组括号捕获一个项目并给它一个数字。然后您可以将该数字插入字符串的任何其他部分。

这是一个工作演示:

http://ideone.com/49NH6V