wordpress:添加 <noscript> 标签会使 <head> 标签自动关闭

wordpress: adding a <noscript> tag makes the <head> tag autoclose

大家好。 我在 wordpress 网站上使用 "amp" 生成器,该插件的其中一项操作是在 </head> 之前添加一个 biolerplate 标签和一个带有回退的 <noscript> 标签。 Google 搜索控制台不断警告我特定错误: "The mandatory tag 'noscript enclosure for boilerplate' is missing or incorrect."

所以我开始调查。 我发现 "something" 在 <noscript> 开始标记之前注入 </head><body> ,如果我更改放置 noscript 标记的位置,其他两个也会移动。

这是呈现的代码:

<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style>
</head><body><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>

我做了很多测试,似乎 <noscript> 标签是这个错误的关键。 我还读过一些其他的答案,这些答案说文档不应该是严格的 xhtml 1.1,但事实并非如此,事实上,这些是页面上呈现的第一件事:

<!DOCTYPE html>
<html amp lang="it-IT"><head><meta charset="utf-8"><link rel="dns-prefetch" href="https://cdn.ampproject.org">

我想弄清楚我能做些什么来解决这个错误,这个错误存在于许多站点,使用不同的插件和主题(以及 wordpress 版本)。

更新: 我试图在代码中手动添加一个 <noscript> 标记,每次我将它添加到 <head> 部分时,该部分都会关闭,并且 <body> 部分会打开,没有任何class(所以这看起来像是一个错误)。 如果您想查看错误,请到此处查找代码:

https://www.assistenzamalasanita.com/2015/07/errori-medici-durante-il-parto-come-si-valutano/amp/

更新 2 禁用所有插件并切换到默认主题对此没有影响。 另外,我已经将整个网站复制到另一台服务器上,问题不存在,WP 网站是相同的,而且服务器配置应该是,BUT 在网站上这是有效的我可以看到 HTTP 请求有一个关于 php 版本 (7.0.2) 的属性,而另一个站点没有。

这是否会影响页面的呈现?? 查看有效的网站: https://www.doors.it/iride/2017/10/risarcimento-malasanita/amp

更新 3 这是插件的一部分,实际上是编写样板代码(其中有 head 和 body 错误的标签)。

add_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' );
function amp_post_template_add_boilerplate_css( $amp_template ) {
    ?>
    <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
    <?php

    }

您可能会注意到,整个块是一次插入的,背后没有任何逻辑,页面应该按原样呈现(在该代码中,我尝试将标签更改为 <nonscript> 一切都很好,head 标签没有关闭,body 标签在正确的位置打开,正确的 classes.

正如评论和第三次编辑所说,这是由挂钩函数引起的。幸运的是,这通常是一个非常简单的修复!

就像评论中提到的@sally-cj 一样,使用remove_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' ); 完全停止此函数的触发。

如果我们不想在管理员中输入样式,您可以在主题代码中复制过滤器,而不要使用有问题的 </noscript> 标签。

add_action( 'amp_post_template_head', 'so_52185596_custom_boilerplate_css' );
function so_52185596_custom_boilerplate_css( $amp_template ) {
?>
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style>
<?php

}