将有效的XHTML结束img标记添加到WordPress图库

时间:2016-06-29 作者:Yala Herzlin

默认WordPress库img标记关闭,如<img> 这是无效的XHTML。我使用的lazyload XT插件以有效的XHTML img标记为目标,这意味着结束应该是:

<img src="http://www.acaciafotografia.com/wp-content/themes/jamdxstarter/img/tri.jpg"/>
而不是

<img src="http://www.acaciafotografia.com/wp-content/themes/jamdxstarter/img/tri.jpg">
如何过滤或修改此选项,以便lazyload正常工作?

Issue explained by author of wp lazyload XT integration.

我使用的主题是下划线,它修改了WP库的标记,使其符合HTML5。这在Lazyload XT中不起作用,它获取以“/>”结尾的XHTML img标记,而HTML5 img标记不需要以“>”结尾

在里面functions.php 我注释掉了以下行:

    /*
     * Switch default core markup for search form, comment form, and comments
     * to output valid HTML5.
     */
    add_theme_support( \'html5\', array(
        \'search-form\',
        \'comment-form\',
        \'comment-list\',
//      \'gallery\',
        \'caption\',
    ) );

2 个回复
SO网友:Tim Malone

linked to 根据对您问题的评论post_gallery filter 应该在这里帮助你。

但与许多其他挂钩不同的是,您无法过滤来自WordPress的输出;您只能提供自己的可选输出。这有点烦人,导致您需要从头开始构建库。不过,您可以通过一些额外的代码来实现这一点linked StackOverflow answer 提供了一个示例(但奇怪地使用<div src>, 所以把它改成<img src> - 然后从默认的WordPress标记中提取其余部分,确保关闭<img /> 标签)。

另一种方法是使用the_content filter 还有一些聪明的规则。你需要小心,因为如果你没有考虑到所有潜在的情况,你的正则表达式可能会捕捉到一些你不想捕捉的东西。这正是本例中插件作者所面临的问题trying to avoid.

话虽如此,这里有一个潜在的解决方案。根据您的需要进行修改,但是don\'t rely on this as a 100% foolproof solution.

// priority must be more than 10, so it runs after the gallery shortcode does
add_filter( \'the_content\', \'wpse231040_close_gallery_img_tags\', 11);

  function wpse231040_close_gallery_img_tags ( $html ) {
    if ( strpos ( $html, \'#gallery-\' ) === false ) { return $html; }
    // make sure there\'s at least one gallery before running the more expensive preg_replace

    $html = preg_replace(
      \'/
        (
          \\<dl.*?class=["\\\'].*?gallery-item[\\s"\\\'].*?   # look inside a <dl> with gallery-item class
          \\<dt.*?class=["\\\'].*?gallery-icon[\\s"\\\'].*?   # look inside a <dt> with gallery-icon class
          \\<img\\s                                       # look inside an <img> tag
        )
        (.*?)\\>                                         # match the attributes inside the tag
      /sx\',
      \'$1$2 />\',    // add the initial content, the img tag attributes, and finally a closing />
      $html
    );

  return $html;
  }

SO网友:birgire

默认wordpress库img标记关闭,XHTML无效

据我所知,情况并非如此。

本地画廊uses wp_get_attachment_image() 生成每个图像标记,并wp_get_attachment_link(), 这是一个包装wp_get_attachment_image(), 获取图像链接。

这个output 属于wp_get_attachment_image() 是:

$html = rtrim("<img $hwstring");
foreach ( $attr as $name => $value ) {
    $html .= " $name=" . \'"\' . $value . \'"\';
}
$html .= \' />\';
在这里,我们可以明确地看到/> 正在关闭。