将类添加到Wordpress图片<a>锚元素

马他宁兰

我需要对围绕没有标题的帖子中嵌入的图像的元素进行样式设置,但是据我所知,没有方法可以自动向其添加类或<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>


代码(用于functions.php)

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>(了解更多有关环顾四周的信息。)
  • 用正则表达式,我认为[^>]*比更好.*[^>]*表示零个或多个不是的字符>没有[^>]*,我认为如果>一行上有多个字符或在其他奇怪的情况下可能会出现问题
  • 在正则表达式中,反斜杠后跟数字(例如in),'<a\1 class="' . $classes . '"><img\3></a>'是指相应模式中相应括号内的内容。换句话说,\1意思是“放入与第一组括号内的内容匹配的内容”。
  • 在该行中add_filter('the_content', 'add_classes_to_linked_images', 10, 1);,第一个参数是用于从数据库获取帖子内容的过滤器,第二个参数是我们要使用的函数的名称,第三个参数是过滤器的优先级(更高的数字将在以后执行),第四个参数是过滤器的参数数量。
  • 假设您的锚点和图像组合已经具有要添加的类,则此函数将使其在页面的源代码中显示两次。(不用担心,它最多只会显示两次,并且不会引起任何问题。请参见上面的示例。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery:将onClick函数添加到锚元素

来自分类Dev

将类添加到锚点

来自分类Dev

将类添加到 Wordpress 菜单 ul 元素

来自分类Dev

如何在页面加载时将类添加到具有特定href的锚元素

来自分类Dev

如何将CSS类添加到HTML5图片元素

来自分类Dev

将类添加到父元素

来自分类Dev

将类添加到erb元素

来自分类Dev

将类添加到后续元素

来自分类Dev

无法将类添加到元素

来自分类Dev

将类添加到槽元素 (?)

来自分类Dev

将id或类添加到wordpress单选按钮的label元素中

来自分类Dev

将类添加到动态添加的元素

来自分类Dev

将类添加到动态添加的元素

来自分类Dev

将#href锚添加到网页

来自分类Dev

将类添加到所选元素之外的元素

来自分类Dev

将类添加到子元素但不添加到父元素

来自分类Dev

使用定义的锚点将图片添加到绘图

来自分类Dev

当微调器使用Selenium和Python将锚元素隐藏时,如何单击该锚元素?

来自分类Dev

如何添加/删除类到 div 内的特定锚元素?

来自分类Dev

jQuery仅将类添加到一个锚,而不是全部添加

来自分类Dev

将类添加到被包含的元素中

来自分类Dev

如何使用Deface将类添加到html元素?

来自分类Dev

通过循环将类添加到多个HTML元素

来自分类Dev

Javascript-将类添加到数组中的元素

来自分类Dev

单击嵌套元素将类添加到同级

来自分类Dev

根据URL将活动类添加到父元素

来自分类Dev

根据内容将类添加到DOM中的元素

来自分类Dev

jQuery将CSS类添加到父<ul>元素

来自分类Dev

将类添加到AngularJs中的多个元素