Wordpress函数 - 如何使用替换字符串函数。添加一些代码

时间:2014-05-01 19:01:31

标签: php wordpress

我之前使用了一些代码,我发现将“rel = shadowbox”添加到我在Wordpress中的链接(这就像魅力一样)。

/*
Plugin Name: Add shadowbox
*/
define("IMAGE_FILETYPE", "(bmp|gif|jpeg|jpg|png)", true);
function addlightboxrel_replace($string) {
    $pattern = '/<a(.*?)href="(.*?).(bmp|gif|jpeg|jpg|png)"(.*?)>/i';
    $replacement = '<a$1href="$2.$3" rel=\'shadowbox\'$4>';
    return preg_replace($pattern, $replacement, $string);
}
add_filter('the_content', 'addlightboxrel_replace');

我必须使用单独的插件来添加一些图库图像。然而,这个插件没有将缩略图图像包装在“a”标签中(并且没有选项可以这样做)。因此,我不是编辑插件,而是尝试使用相同的替换想法在图像周围添加链接。

我不太了解第一个替换代码,所以我确定我错过了一些东西。我也试图替换多行代码,所以我不确定它是否会破坏它。这就是我所拥有的:

define("IMAGE_FILETYPE", "(bmp|gif|jpeg|jpg|png)", true);
function addlink_replace($string) {
    $pattern = '/<ul class="slides"(.*?)><li(.*?)><img(.*?)src=(.*?)><(.*?)li><(.*?)ul>/i';
    $replacement = '<ul class="slides"$1><li$2><a src="$4"><img$3src=$4></a><$5li><$6ul>';
    return preg_replace($pattern, $replacement, $string);
}
add_filter('the_content', 'addlink_replace');

这是插件吐出的当前代码:

<ul class="slides" style="width: 600%; transition-duration: 0s; transform: translate3d(0px, 0px, 0px);">
    <li style="float: left; display: block; width: 100px;">
        <img width="110" height="110" class="slider-247 slide-243" alt="" src="http://carerforklifts.com/wp-content/uploads/2014/04/F16H-1-110x110.jpg" draggable="false">
    </li>
</ul>

我想在图像周围打一个“a”标签,使用标签src的当前图像URL。 (如果可能的话,我需要在jpg的末尾删除“-110x100”位。

<ul class="slides" style="width: 600%; transition-duration: 0s; transform: translate3d(0px, 0px, 0px);">
    <li style="float: left; display: block; width: 100px;">
        <a src="http://carerforklifts.com/wp-content/uploads/2014/04/F16H-1.jpg">
            <img width="110" height="110" class="slider-247 slide-243" alt="" src="http://carerforklifts.com/wp-content/uploads/2014/04/F16H-1-110x110.jpg" draggable="false">
        </a>
    </li>
</ul>

目前正在此网站上工作,如果有帮助:http://www.carerforklifts.com/f16-h/

1 个答案:

答案 0 :(得分:1)

你所拥有的正则表达式不能正确匹配,它缺少一些东西。我已经改变并简化了一下,所以如果每次你需要修改它时无序列表的结构都不一样。以下是函数中更新的正则表达式:

function addlink_replace($string) {
    $pattern = '/<ul(.*?)class="slides"(.*?)<img(.*?)src="(.*?)"(.*?)>(.*?)<\/ul>/is';
    $replacement = '<ul$1class="slides"$2<a href="$4"><img$3src="$4"$5></a>$6</ul>';
    return preg_replace($pattern, $replacement, $string);
}

基本上这将匹配任何具有类slides的无序列表,后跟任何一个图像标记,它将捕获源属性之前的任何内容,它将捕获图像源本身,图像中的任何内容在source属性之后标记,然后是无序列表的结束标记之外的任何内容。

替换将是相同的字符串,但使用href属性的图像周围的锚标记与图像src相同。

我在regex101上做了一个示例输出,在右侧栏中详细说明了它的匹配。