Eliminar el atributo type de las etiquetas script y style añadidas por WordPress

5 dic 2017, 21:05:05
Vistas: 62.2K
Votos: 21
Advertencia: El atributo type es innecesario para recursos JavaScript.
    De la línea 10, columna 146; a la línea 10, columna 176
    feed/" /> <script type="text/javascript">window
   
Advertencia: El atributo type para el elemento style no es necesario y debe omitirse.
    De la línea 11, columna 1798; a la línea 11, columna 1820
    </script> <style type="text/css">img.wp
    
Advertencia: El atributo type para el elemento style no es necesario y debe omitirse.
    De la línea 23, columna 193; a la línea 23, columna 251
    a='all' /><style id='kirki-styles-global-inline-css' type='text/css'>.envel
    
Advertencia: El atributo type es innecesario para recursos JavaScript.
    De la línea 23, columna 905; a la línea 23, columna 1010
    }</style> <script async type="text/javascript" src="http://....../wp-content/cache/minify/df983.js"></scri
    
Advertencia: El atributo type para el elemento style no es necesario y debe omitirse.
    De la línea 70, columna 126; a la línea 70, columna 167
    70.png" /><style type="text/css" id="wp-custom-css">@media
    
Advertencia: El atributo type es innecesario para recursos JavaScript.
    De la línea 441, columna 156; a la línea 441, columna 261
    iv></div> <script defer type="text/javascript" src="http://......./wp-content/cache/minify/26938.js"></scri
    
Advertencia: El atributo type es innecesario para recursos JavaScript.
    De la línea 441, columna 272; a la línea 441, columna 302
    </script> <script type='text/javascript'>/*  */
    
Advertencia: El atributo type es innecesario para recursos JavaScript.
    De la línea 443, columna 17; a la línea 443, columna 122
    </script> <script defer type="text/javascript" src="http://......../wp-content/cache/minify/6ce07.js"></scri

Estos errores son una nueva introducción de W3C y han comenzado a aparecer solo en los últimos 3-4 días.Ejemplo de errores W3C en WordPress

Nosotros encolamos los scripts de esta manera →

wp_register_script( 'custom-js', get_template_directory_uri() . '/js/custom.js', array( 'jquery' ), '1.1', true );
    wp_enqueue_script( 'custom-js' );

¿Podemos arreglar esto desde el método de encolamiento anterior de alguna manera?

Actualización →

estos son los errores reales. En el cuadro rojo están los que provienen de W3 Total Cache.Errores de W3 Total Cache en WordPress

5
Comentarios

el validador W3C rara vez devuelve sitios WordPress o cualquier CMS popular sin errores. Parece que empeora cada año. El validador (en mi opinión) debería usarse como herramienta para revelar algunos errores básicos (como olvidar etiquetas alt o no cerrar una etiqueta), pero no debería considerarse un estándar como solía ser.

David Sword David Sword
5 dic 2017 21:11:30

lo introdujeron después del 2 de diciembre de 2017. Antes de eso, mi tema estaba libre de errores/advertencias. Debería haber alguna forma de eliminarlos.

WordCent WordCent
5 dic 2017 21:16:37

mira el hook script_loader_tag, podrías hacer un str_replace() para eliminarlos.

David Sword David Sword
5 dic 2017 22:18:27

Vale la pena señalar que estos son solo advertencias, no errores. Tu sitio aún pasará la validación.

swissspidy swissspidy
26 ene 2018 10:45:03

También puedes revisar la siguiente respuesta -- https://stackoverflow.com/a/53380692/2611955

Jahirul Islam Mamun Jahirul Islam Mamun
23 sept 2019 08:24:27
Todas las respuestas a la pregunta 12
5
45

WordPress 5.3 introduce una forma considerablemente más sencilla de lograr esto. Al registrar el soporte del tema para HTML 5 en script y style, el atributo type="" se omitirá:

add_action(
    'after_setup_theme',
    function() {
        add_theme_support( 'html5', [ 'script', 'style' ] );
    }
);
28 nov 2019 16:24:10
Comentarios

Esta es la forma correcta de hacerlo.

Ankit Chauhan Ankit Chauhan
8 ene 2020 08:13:20

¡Buen trabajo! Esta debería ser la respuesta aceptada.

Joe Joe
15 ene 2020 17:10:03

¿Podrías especificar en qué archivo debería colocar el código anterior?

yaylitzis yaylitzis
21 may 2020 14:02:44

No elimina el tipo de la línea con wp-emoji-release.min.js - <script src="https://example.com/wp-includes/js/wp-emoji-release.min.js?ver=5.5.3" type="text/javascript" defer=""></script>. Esto se debe a https://core.trac.wordpress.org/ticket/51837

kanlukasz kanlukasz
23 nov 2020 08:08:06
8
18

Puedes eliminar los atributos type='*' y sus valores de los scripts y estilos cargados con wp_enqueue, utilizando los respectivos hooks *_loader_tag.

El siguiente código funcionó para mí:

add_action( 'wp_enqueue_scripts', 'myplugin_enqueue' );

function myplugin_enqueue() {
    // wp_register_script(...
    // wp_enqueue_script(...
}


add_filter('style_loader_tag', 'myplugin_remove_type_attr', 10, 2);
add_filter('script_loader_tag', 'myplugin_remove_type_attr', 10, 2);

function myplugin_remove_type_attr($tag, $handle) {
    return preg_replace( "/type=['\"]text\/(javascript|css)['\"]/", '', $tag );
}
5 dic 2017 23:37:33
Comentarios

Intenté esto, pero no solucionó el problema. Quizás necesitemos hacer alguna manipulación adicional.

WordCent WordCent
5 dic 2017 23:45:28

Especulo que algunos de tus scripts de plugins (como los del plugin de caché con la etiqueta defer) podrían no estar usando wp_enqueue_script y por lo tanto no usarían *_loader_tag. ¿Podrías confirmar que, con mi fragmento de código añadido, en el código fuente de tu sitio, custom.js sigue teniendo type='text/javascript'?

David Sword David Sword
5 dic 2017 23:56:09

No. Eliminé el plugin w3 total cache. 3 de 8 errores desaparecieron, pero 5 aún permanecen.

WordCent WordCent
5 dic 2017 23:59:32

Bueno, puedes rastrear el origen de los cinco y ver si es posible editar las etiquetas. Especulo nuevamente que probablemente no usan wp_enqueue. Sugiero que agregues una ACTUALIZACIÓN a tu publicación original para reflejar los 5 persistentes que quedan, con referencias de código y plugins - podría ayudar un poco más.

David Sword David Sword
6 dic 2017 00:14:43

Señor, actualicé los errores con la imagen esta vez.

WordCent WordCent
6 dic 2017 04:31:09

& ¿qué plugin genera esos archivos */cache/minify/*.js?

David Sword David Sword
6 dic 2017 04:38:32

señor, el plugin W3 Total Cache. W3 ha introducido estas advertencias después del 2 de diciembre. Si pones cualquier sitio web de WordPress en el validador, verás estas advertencias.

WordCent WordCent
6 dic 2017 04:50:45

Gracias David, esto funcionó para la mayoría de las mías, pero todavía quedan algunas por resolver. ¡Mejor que nada!

Jordan Carter Jordan Carter
22 feb 2018 06:51:51
Mostrar los 3 comentarios restantes
1

Lo obtuve del plugin soil / roots. Hizo el trabajo en su mayor parte.

    add_filter( 'style_loader_tag',  'clean_style_tag'  );
add_filter( 'script_loader_tag', 'clean_script_tag'  );

/**
 * Limpiar la salida de las etiquetas <link> de hojas de estilo
 */
function clean_style_tag( $input ) {
    preg_match_all( "!<link rel='stylesheet'\s?(id='[^']+')?\s+href='(.*)' type='text/css' media='(.*)' />!", $input, $matches );
    if ( empty( $matches[2] ) ) {
        return $input;
    }
    // Solo mostrar media si es significativo
    $media = $matches[3][0] !== '' && $matches[3][0] !== 'all' ? ' media="' . $matches[3][0] . '"' : '';

    return '<link rel="stylesheet" href="' . $matches[2][0] . '"' . $media . '>' . "\n";
}

/**
 * Limpiar la salida de las etiquetas <script>
 */
function clean_script_tag( $input ) {
    $input = str_replace( "type='text/javascript' ", '', $input );

    return str_replace( "'", '"', $input );
}
20 dic 2017 17:54:21
Comentarios

¿Lo has intentado?

WordCent WordCent
20 dic 2017 21:58:19
3

Los enfoques de style_loader_tag y script_loader_tag mencionados anteriormente parecen funcionar para cualquier marcado que WordPress genere, en casos donde el tema/plugin utiliza las funciones de encolado adecuadas.

Si tienes plugins problemáticos que no cooperan (por ejemplo, Jetpack solía ser uno de ellos, a menos que una versión más reciente haya corregido esto), y estás decidido a resolver este problema a pesar de que es poco probable que afecte a tus visitantes (¡su navegador renderizará la página sin problemas!), siempre puedes optar por usar el buffering de salida:

add_action('wp_loaded', 'output_buffer_start');
function output_buffer_start() { 
    ob_start("output_callback"); 
}

add_action('shutdown', 'output_buffer_end');
function output_buffer_end() { 
    ob_end_flush(); 
}

function output_callback($buffer) {
    return preg_replace( "%[ ]type=[\'\"]text\/(javascript|css)[\'\"]%", '', $buffer );
}

Advertencia: aunque esto es una solución, no es muy eficiente. Estarías ejecutando preg_replace() en toda la salida "final" de WordPress antes de que se envíe al navegador del cliente, para cada solicitud.

El buffering de salida se activa al inicio (gancho wp_loaded), es decir, justo cuando WordPress + tema + plugins + etc. están completamente cargados, y se desactiva en el último momento (gancho shutdown), que se ejecuta justo antes de que PHP termine la ejecución. La expresión regular debe procesar todo, ¡y eso puede ser mucho contenido!

Los enfoques de style_loader_tag y script_loader_tag mencionados anteriormente solo ejecutan la expresión regular en una cadena muy pequeña (la etiqueta en sí), por lo que el impacto en el rendimiento es insignificante.

Supongo que si tienes contenido relativamente estático y usas una capa de caché, podrías intentar mitigar el problema de rendimiento.

Referencias del manual de PHP:

24 may 2018 05:22:20
Comentarios

Esta es la mejor respuesta y solo funciona correctamente sin errores. Gracias hombre.

Ivijan Stefan Stipić Ivijan Stefan Stipić
28 may 2018 09:24:48

La única solución que funciona

Timur Gafforov Timur Gafforov
10 nov 2018 08:23:06

Si alguien tiene curiosidad, WordPress no parece usar los filtros style_loader_tag o script_loader_tag al agregar una etiqueta <script> para scripts inline. https://developer.wordpress.org/reference/classes/wp_scripts/print_inline_script/

firxworx firxworx
13 nov 2018 21:50:45
1

Esto me ayudó mucho:

add_filter('script_loader_tag', 'clean_script_tag');
  function clean_script_tag($input) {
  $input = str_replace("type='text/javascript' ", '', $input);
  return str_replace("'", '"', $input);
}

Gracias a css-tricks (LeoNovais): https://css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/#post-246425

31 ene 2018 09:30:32
Comentarios

La publicación específica a la que se refiere el OP de arriba está realmente aquí: https://css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/#post-246425 Nota: el script está en negro, pero al seleccionar el texto, puedes leerlo, y está como se publicó arriba. LeoNovais no ofrece ninguna explicación adicional. No sé por qué CSS Tricks oscureció su script.

SherylHohman SherylHohman
13 ene 2019 21:54:51
0

Según el código en script-loader.php, el atributo type se omite cuando se añade soporte para temas html5 con los argumentos de script y style.

Ver los siguientes enlaces:

function yourthemeprefix_theme_supportt() {
    add_theme_support(
        'html5',
        array(
            'script', // Corrección para: El atributo "type" es innecesario para recursos JavaScript.
            'style',  // Corrección para: El atributo "type" para el elemento "style" no es necesario y debe omitirse.
        )
    );
}
add_action( 'after_setup_theme', 'yourthemeprefix_theme_support' );
16 dic 2019 12:32:57
0

Basado en @realmag77. Esto aprovechará el plugin Autoptimize para poder filtrar TODOS los atributos type sin romper nada si no está instalado y activado. El respaldo funciona bien, pero esos scripts y hojas de estilo cargados a través de plugins no serán filtrados. No sé cómo filtrarlos de otra manera que no sea utilizando la parte de Autoptimize.

/* ==========================================
   Eliminar el atributo type en JS/CSS
   (requiere el plugin Autoptimize y Optimizar HTML marcado)
   pero con respaldo por si acaso
========================================== */

// Si Autoptimize está instalado y activado, elimina los atributos type para todo JS/CSS
if ( is_plugin_active( 'autoptimize/autoptimize.php' ) ) {

    add_filter('autoptimize_html_after_minify', function($content) {

        $site_url = home_url();
        $content = str_replace("type='text/javascript'", '', $content);
        $content = str_replace('type="text/javascript"', '', $content);

        $content = str_replace("type='text/css'", '', $content);
        $content = str_replace('type="text/css"', '', $content);

        $content = str_replace($site_url . '/wp-includes/js', '/wp-includes/js', $content);
        $content = str_replace($site_url . '/wp-content/cache/autoptimize', '/wp-content/cache/autoptimize', $content);
        $content = str_replace($site_url . '/wp-content/themes/', '/wp-content/themes/', $content);
        $content = str_replace($site_url . '/wp-content/uploads/', '/wp-content/uploads/', $content);
        $content = str_replace($site_url . '/wp-content/plugins/', '/wp-content/plugins/', $content);

        return $content;

    }, 10, 1);

} else {

    // Respaldo para eliminar atributos type excepto aquellos cargados a través de plugins
    add_filter('style_loader_tag', 'pss_remove_type_attr', 10, 2);
    add_filter('script_loader_tag', 'pss_remove_type_attr', 10, 2);
    function pss_remove_type_attr($tag, $handle) {
        return preg_replace( "/type=['\"]text\/(javascript|css)['\"]/", '', $tag );
    }
}
6 nov 2018 21:31:59
1
add_action('wp_loaded', 'prefix_output_buffer_start');
function prefix_output_buffer_start() { 
    ob_start("prefix_output_callback"); 
}

add_action('shutdown', 'prefix_output_buffer_end');
function prefix_output_buffer_end() { 
    ob_end_flush(); 
}

function prefix_output_callback($buffer) {
    return preg_replace( "%[ ]type=[\'\"]text\/(javascript|css)[\'\"]%", '', $buffer );
}
1 may 2019 12:42:34
Comentarios

Bienvenido a WPSE, Jeevan. Es útil si incluyes una explicación con tu respuesta sobre por qué esto soluciona el problema y cómo funciona.

butlerblog butlerblog
1 may 2019 14:28:03
1

Puedes usar las siguientes funciones para eliminar los atributos type de las etiquetas link y script.

Pega la siguiente función en functions.php para eliminar el type=text/css de las etiquetas link

/* Elimina el atributo " 'type=text/css' " de las hojas de estilo */
function wpse51581_hide_type($src) {
    return str_replace("type='text/css'", '', $src);
}
add_filter('style_loader_tag', 'wpse51581_hide_type');

===========================================================================

Pega la siguiente función en functions.php para eliminar el type='text/javascript' de las etiquetas script

//* Elimina el atributo type de script y style
add_filter('script_loader_tag', 'codeless_remove_type_attr', 10, 2);
function codeless_remove_type_attr($tag, $handle) {
    return preg_replace( "/type=['\"]text\/(javascript|css)['\"]/", '', $tag );
}
28 nov 2019 14:30:52
Comentarios

la respuesta es correcta pero aún así alguien votó negativo

Infoconic Technologies Infoconic Technologies
29 nov 2019 23:36:26
0

Bueno, porque he probado montones de otros códigos y los mencionados aquí, todavía quedan rastros del text/javascript de los archivos principales de WordPress y también de otros plugins y códigos javascript inline. Después de probar este código, todo se ha resuelto:

// Eliminar la validación w3 respecto a "text/javascript"
add_action('wp_loaded', 'prefix_output_buffer_start');
function prefix_output_buffer_start() { 
    ob_start("prefix_output_callback"); 
}
add_action('shutdown', 'prefix_output_buffer_end');
function prefix_output_buffer_end() { 
    ob_end_flush(); 
}
function prefix_output_callback($buffer) {
    return preg_replace( "%[ ]type=[\'\"]text\/(javascript|css)[\'\"]%", '', $buffer );
}

Espero que pueda ayudar a alguien :)

Gracias

6 dic 2019 01:13:13
0
-1

Si estás experimentando esto con WP Fastest Cache, puedes eliminar manualmente el atributo type en el script PHP del plugin. Esto debería funcionar con otros plugins también, aunque no conozco los archivos específicos donde están agregando el atributo type. Para WP Fastest Cache, debes ir a la carpeta wp-content/plugins/wp-fastest-cache/inc y abrir js-utilities.php, luego buscar text/javascript y eliminarlo junto con el atributo. Yo tenía esa advertencia en el Validador W3 y lo solucioné de esa manera. También ten en cuenta que cuando actualices el plugin, ese cambio podría revertirse. Para desactivar las actualizaciones del plugin, puedes editar wpFastestCache y cambiar la versión del plugin a algo como 10.0.8.7.7.

19 mar 2018 00:07:01
0
-1

Puedes optimizar el código HTML de tu sitio como desees en 2 pasos:

  • Instala este plugin: https://wordpress.org/plugins/autoptimize/
  • Activa en las opciones del plugin 'Optimizar código HTML?'
  • En el archivo functions.php de tu tema actual de WordPress aplica el siguiente código:

    add_filter('autoptimize_html_after_minify', function($content) {

        $site_url = 'https://bulk-editor.com';    
        $content = str_replace("type='text/javascript'", ' ', $content);
        $content = str_replace('type="text/javascript"', ' ', $content);
    
        $content = str_replace("type='text/css'", ' ', $content);
        $content = str_replace('type="text/css"', ' ', $content);
    
        $content = str_replace($site_url . '/wp-includes/js', '/wp-includes/js', $content);
        $content = str_replace($site_url . '/wp-content/cache/autoptimize', '/wp-content/cache/autoptimize', $content);
        $content = str_replace($site_url . '/wp-content/themes/', '/wp-content/themes/', $content);
        $content = str_replace($site_url . '/wp-content/uploads/', '/wp-content/uploads/', $content);
        $content = str_replace($site_url . '/wp-content/plugins/', '/wp-content/plugins/', $content);    
        return $content;    }, 10, 1);
    

    y no olvides cambiar $site_url por el enlace de tu sitio sin barra al final

10 may 2018 14:54:39