wordpress: agregando un la etiqueta hace que etiqueta de cierre automático

6 minutos de lectura

avatar de usuario
Matteo Bononi ‘peortir’

Buen día a todos. Estoy usando un generador de “amp” en un sitio de wordpress, una de las acciones de este complemento es agregar una etiqueta biolerplate justo antes del </head> y un <noscript> etiqueta con un respaldo. La consola de búsqueda de Google sigue advirtiéndome sobre un error específico: “Falta la etiqueta obligatoria ‘noscript recinto para repetitivo’ o es incorrecta”.

Así que me pongo a investigar. Lo que he encontrado es que “algo” está inyectando el </head><body> justo antes de la <noscript> etiqueta de apertura, si cambio el lugar donde coloco la etiqueta noscript, los otros dos también se mueven.

este es el código renderizado:

<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>

He hecho muchas pruebas y parece que el <noscript> La etiqueta es el punto de este error. También he leído algunas otras respuestas que dicen que el documento no debe ser estricto xhtml 1.1, que no es el caso, de hecho, estas son las primeras cosas que se muestran en la página:

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

Estoy tratando de averiguar qué puedo hacer para resolver este error que está presente en muchos sitios, con diferentes complementos y temas (y también versiones de wordpress).

ACTUALIZAR:
He intentado agregar manualmente un <noscript> etiqueta en el código, y cada vez que lo agrego en el <head> sección, la sección se cierra, y la <body> se abre la sección, sin ninguna clase (por lo que parece un error). si desea ver el error, solo vaya aquí y busque el código:

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

ACTUALIZAR 2
Deshabilitar TODOS los complementos y cambiar al tema predeterminado no tiene ningún efecto en esto. Además, he copiado todo el sitio tal como está en otro servidor, en el que el problema no está presente, los sitios de WP son idénticos y también deberían ser las configuraciones del servidor, PERO en el sitio que está funcionando puedo ver que la solicitud HTTP tiene un atributo sobre la versión de php (7.0.2) que el otro sitio no tiene.

¿Es posible que esto pueda influir en la representación de la página? para ver el sitio que funciona:
https://www.doors.it/iride/2017/10/risarcimento-malasanita/amp

ACTUALIZAR 3
esta es la parte del complemento que en realidad escribe el código del modelo (que tiene las etiquetas incorrectas de cabeza y cuerpo).

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

    }

Como puede notar, todo el bloque se inserta de una sola vez, no hay lógica detrás y la página debe representarse tal como está (en ese código, intenté cambiar las etiquetas a <nonscript> y todo estuvo bien, las etiquetas de cabeza no se cerraron y la etiqueta de cuerpo se abrió en el lugar correcto, con las clases correctas.

  • ¿Puede decirme el complemento que está utilizando para AMP?

    – Subcontratar WordPress

    15 de septiembre de 2018 a las 6:18

  • AMP para WP – Páginas móviles aceleradas para WordPress

    – Matteo Bononi ‘peortir’

    18 de septiembre de 2018 a las 8:50

  • Debe proporcionar un ejemplo reproducible mínimo. No hay forma de que sepamos por qué el HTML se está insertando en el lugar equivocado sin ver el PHP que lo está insertando.

    – Quintín

    18 de septiembre de 2018 a las 10:56

  • La devolución de llamada/gancho amp_post_template_add_boilerplate_css puede haber sido movido/reubicado de amp_post_template_head a amp_start o ampforwp_body_beginning – los dos últimos añadirían el noscript etiqueta en el body y no el head. Para confirmar, intente agregar este código en functions.php: add_action( 'ampforwp_body_beginning', function(){ var_dump( $GLOBALS['wp_filter'] ); } ); y luego compartir/inspeccionar el var_dump() producción.

    – Sally C.J.

    18 de septiembre de 2018 a las 13:43

  • Muy bien, @MatteoBononi’peorthyr’, pero también puedes probar esto: eliminar la acción – remove_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' ) y copie todo el HTML de amp_post_template_add_boilerplate_css() y agréguelo a través de la página de configuración/UI: el complemento AMP usa el almacenamiento en búfer de salida (por lo que incluso con la adición manual de HTML a través de la UI, el noscript todavía podría ser empujado en el body), Pero puedes intentar..

    – Sally C.J.

    19 de septiembre de 2018 a las 14:53

Como han sugerido los comentarios y dice la tercera edición, esto está siendo causado por una función enganchada. ¡Afortunadamente, esa suele ser una solución bastante sencilla!

Como @sally-cj mencionado en los comentarios, use remove_action( 'amp_post_template_head', 'amp_post_template_add_boilerplate_css' ); para evitar que esta función se active por completo.

Si no quisiéramos ingresar los estilos en el administrador, podría simplemente duplicar el filtro en el código de su tema sin ofender </noscript> etiqueta.

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

}

¿Ha sido útil esta solución?