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

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

Итак, я начинаю расследовать. Я обнаружил, что «что-то» вводит </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).

UPDATE: Я пытался вручную добавить тег <noscript> в код, и каждый раз, когда я добавляю его в раздел <head>, раздел закрывается, а раздел <body> открывается без какого-либо класса (так что Жук). если вы хотите увидеть ошибку, просто зайдите сюда и найдите код:

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

ОБНОВЛЕНИЕ 2 Отключение ВСЕХ плагинов и переключение на тему по умолчанию не влияет на это. Кроме того, я скопировал весь сайт как есть на другом сервере, на котором проблема отсутствует, сайты WP идентичны, а также конфигурации serer должны быть НО на работающем сайте. I видно, что у 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> и все все было в порядке, теги head не закрывались, а тег body открывался в нужном месте с правильными классами.

1 Ответ

0 голосов
/ 17 ноября 2018

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

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

}
...