WordPress: добавление тега <noscript> заставляет тег <head> автоматически закрывать

Добрый день всем. Я использую генератор "amp" на сайте WordPress, одно из действий этого плагина заключается в добавлении тега biolerplate непосредственно перед </head> и <noscript> тег с запасным вариантом. Поисковая консоль Google постоянно предупреждает меня об определенной ошибке: "Обязательный тег" Корпус noscript для шаблона "отсутствует или неверен".

Итак, я начинаю расследовать. Я обнаружил, что "что-то" вводит </head><body> как раз перед <noscript> открывающий тег, если я поменяю место, куда я положил тег 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> раздел открыт без какого-либо класса (так что это похоже на ошибку). если вы хотите увидеть ошибку, просто зайдите сюда и найдите код:

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

ОБНОВЛЕНИЕ 2 Отключение ВСЕХ плагинов и переключение на тему по умолчанию не влияет на это. Кроме того, я скопировал весь сайт как есть на другом сервере, на котором проблемы нет, сайты WP идентичны, а также конфигурации serer должны быть, НО на работающем сайте я вижу, что запрос HTTP имеет атрибут о версии php (7.0.2), которого нет на другом сайте.

Возможно ли, что это может повлиять на визуализацию страницы? чтобы увидеть сайт, который работает: https://www.doors.it/iride/2017/10/risarcimento-malasanita/amp

ОБНОВЛЕНИЕ 3 это часть плагина, которая на самом деле пишет код шаблона (который имеет ошибочные метки головы и тела).

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> и все было в порядке, теги заголовка не были закрыты, а тег body был открыт в нужном месте с правильными классами.

1 ответ

Решение

Как отмечается в комментариях и в третьем редактировании, это вызвано подключенной функцией. К счастью, это довольно просто!

Как @ 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

}

Другие вопросы по тегам