我之前使用了一些代码,我发现将“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/
答案 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上做了一个示例输出,在右侧栏中详细说明了它的匹配。