我需要对围绕没有标题的帖子中嵌入的图像的元素进行样式设置,但是据我所知,没有方法可以自动向其添加类或仅<a>
在<img>
内部使用而不使用jQuery或的东西。
这是它们默认情况下的输出方式:
<a href="sample.jpg"><img class="alignnone size-full wp-image-20" src="sample.jpg" alt="Sample Image" width="1280" height="914"></a>
是否有一个简单的wordpress PHP方法,默认情况下,我可以通过该方法在所有这些元素上设置一个简单的“ .img”类?
令人困惑的是,这不是Wordpress中的标准功能,很多人对此表示抱怨,但据我所知没有实际的解决方案。
要澄清的是,这应该适用于帖子中的现有图像,而不仅仅是我以后发表的帖子!
从数据库中检索帖子后,只要其中有仅带有图像标签的锚标签,这会将所有指定的类放入锚标签。
它可以在一个帖子中使用许多图像标签,以及其他各种奇怪的可能性。例如,像这样的东西
<article>
<a href="an_image.jpg">
<img src="an_image.jpg">
</a>
<a class="media-img" href="another_image.jpg">
<img src="another_image.jpg">
</a>
<p>Text with a <a href="google.com">link</a></p>
<a class="big gray ugly" href="third_image.jpg">
<img src="third_image.jpg">
</a>
<a foo="bar" class="big" href="fourth_image.jpg">
<img src="fourth_image.jpg">
</a>
</article>
会变成
<article>
<a class="media-img" href="an_image.jpg">
<img src="an_image.jpg">
</a>
<a class="media-img media-img" href="another_image.jpg">
<img src="another_image.jpg">
</a>
<p>Text with a <a href="google.com">link</a></p>
<a class="media-img big gray ugly" href="third_image.jpg">
<img src="third_image.jpg">
</a>
<a foo="bar" class="media-img big" href="fourth_image.jpg">
<img src="fourth_image.jpg">
</a>
</article>
function add_classes_to_linked_images($html) {
$classes = 'media-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 has no existing classes
$replacements[0] = '<a\1 class="' . $classes . '"><img\2></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></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></a>';
$html = preg_replace($patterns, $replacements, $html);
return $html;
}
add_filter('the_content', 'add_classes_to_linked_images', 100, 1);
(?![^>]*class)
为负前瞻,因此第一个正则表达式替换规则仅影响<a href...><img></a>
,而不影响<a class... href...><img></a>
。(了解更多有关环顾四周的信息。)[^>]*
比更好.*
。[^>]*
表示零个或多个不是的字符>
。没有[^>]*
,我认为如果>
一行上有多个字符或在其他奇怪的情况下可能会出现问题。'<a\1 class="' . $classes . '"><img\3></a>'
是指相应模式中相应括号内的内容。换句话说,\1
意思是“放入与第一组括号内的内容匹配的内容”。add_filter('the_content', 'add_classes_to_linked_images', 10, 1);
,第一个参数是用于从数据库获取帖子内容的过滤器,第二个参数是我们要使用的函数的名称,第三个参数是过滤器的优先级(更高的数字将在以后执行),第四个参数是过滤器的参数数量。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句