0

我一直在寻找一个看似简单的问题的答案,但无济于事。

我有一些 HTML 输出,例如:

<div id="attachment_1098" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" ]][[img class="size-thumbnail wp-image-1098" title="John Doe" src="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" alt="John Doe" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">John Doe</p></div>
<div id="attachment_1080" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-2.jpg" ]][[img class="size-thumbnail wp-image-1080" title="Fred Bloggs" src="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" alt="Fred Bloggs" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Fred Bloggs</p></div>
<div id="attachment_1099" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-3.jpg" ]][[img class="size-thumbnail wp-image-1099" title="Jane Doe" src="mydomain.com/wp-content/uploads/2010/11/photo-3.jpg" alt="Jane Doe" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Jane Doe</p></div>
<div id="attachment_1096" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-4.jpg" ]][[img class="size-thumbnail wp-image-1096" title="Joe Public" src="mydomain.com/wp-content/uploads/2010/11/photo-4.jpg" alt="Joe Public" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Joe Public</p></div>

(上面的 html 实际上格式正确,必须将锚点和图像中的 < & > 分别替换为 [[ 和 ]] 才能发布。)

我想用“wp-caption-text”类围绕每个(p)的文本内容包装一个链接,其网址应具有以下格式:

'/my-page-root/'.strtolower(str_replace(' ','-',$linkText)).'';

(所以 John Doe 会链接到:/my-page-root/john-doe等)

现在,我已经了解了 preg_replace,但我不知道如何从反向引用创建链接 URL。这让我认为必须有一种更简单的方法来做到这一点(可能还有更快的方法?)

无论如何,这是我得到的代码:

<?php $contentLinked = preg_replace("/(<p class=\"wp-caption-text\">.*<\/p>)/Us", "<p class=\"wp-caption-text\"><a href=\"\">$1</a></p>",$content); ?>

这用空锚替换文本就好了,我被如何使用反向引用来创建链接 url 卡住了。

几点注意事项

链接必须只包含文本(稍后可能只需要包含部分文本,但当我谈到它时,我会越过那座桥)

如果没有解决方法以防止剥离链接,Wordpress 将不允许通过所见即所得的方式进行此操作,有一天其他人可能会进入并破坏格式(因此是硬编码),因此没有有用的 wp 解决方法。

图像上的链接必须保留为完整大小的图像(jquery 库正在进行),因此将整个图像和/或 div 包装在链接中不是一种选择

为你能给我的任何帮助干杯。

安迪

4

2 回答 2

0

我已经做到了!

感谢 Jordi 发现了原始缺陷。

在 preg_replace 里面找到了这个调用函数

这导致我改用 preg_replace_callback() (以前从未使用过,从未有过原因)

如果其他人有类似的问题,我生成的代码如下所示:

<?php $contentLinked = preg_replace_callback("/<p class=\"wp-caption-text\">(.*)<\/p>/Us", 'myCallback',$content);?>

和功能:

<?php 
function myCallback($match){

        return '<a href="'.strtolower(str_replace(' ','-',$match[1])).'">'.$match[1].'</a>';

    }
?>
于 2010-11-25T13:25:56.320 回答
0

我认为您需要将要匹配的部分(文本)放在括号中,以便将其保存在反向引用中。像这样:

<?php $contentLinked = preg_replace("/(<p class=\"wp-caption-text\">(.*)<\/p>)/Us", "<p class=\"wp-caption-text\"><a href=\"\">$1</a></p>",$content); ?>
于 2010-11-25T12:29:13.757 回答