我在我的WordPress主题functions.php中使用此代码来添加" fancybox"类链接图像。但是,我不想要将fancybox类添加到链接到非图像URL的图像。
换句话说:目前脚本将添加" fancybox"类到这样的HTML结构(我不想要):
<a href="http://acme.com/a-non-image-link">
<img src="http://acme.com/image.jpg" />
</a>
我只想将类添加到以下结构:
<a href="http://acme.com/an-image.jpg">
<img src="http://acme.com/an-image.jpg" />
</a>
或
<a href="http://acme.com/an-image.jpg">
<img src="http://acme.com/another-image.jpg" />
</a>
如何修改此代码中的正则表达式,仅包含其HREF属性包含.jpg
,.jpeg
,.png
或.gif
的锚标记?
谢谢!
// Add fancybox class to linked images
function add_classes_to_linked_images($html) {
$classes = 'fancybox fancybox-img'; // can do multiple classes, separate with space
$patterns = array();
$replacements = array();
$patterns[0] = '/<a(?![^>]*class)([^>]*)>\s*<img([^>]*)>\s*<\/a>/'; // matches img tag wrapped in anchor tag where anchor tag where anchor has no existing classes
$replacements[0] = '<a\1 class="' . $classes . '"><img\2><span class="post-content-fb-btn"></span></a>';
$patterns[1] = '/<a([^>]*)class="([^"]*)"([^>]*)>\s*<img([^>]*)>\s*<\/a>/'; // matches img tag wrapped in anchor tag where anchor has existing classes contained in double quotes
$replacements[1] = '<a\1class="' . $classes . ' \2"\3><img\4> <span class="post-content-fb-btn"></span></a>';
$patterns[2] = '/<a([^>]*)class=\'([^\']*)\'([^>]*)>\s*<img([^>]*)>\s*<\/a>/'; // matches img tag wrapped in anchor tag where anchor has existing classes contained in single quotes
$replacements[2] = '<a\1class="' . $classes . ' \2"\3><img\4> <span class="post-content-fb-btn"></span></a>';
$html = preg_replace($patterns, $replacements, $html);
return $html;
}
add_filter('the_content', 'add_classes_to_linked_images', 100, 1);
答案 0 :(得分:0)
以下内容适用于一个警告。链接需要位于图像标记的单独行上,否则图像的文件扩展名将创建匹配。
/<a(.*?)href=('|\")(.*?).(bmp|gif|jpeg|jpg|png)('|\")(.*?)>/i
也许有人可以改进它而不是张贴讽刺评论:)