Eliminar el atributo de tipo de script y etiquetas de estilo agregadas por WordPress


15
Warning: The type attribute is unnecessary for JavaScript resources.
    From line 10, column 146; to line 10, column 176
    feed/" /> <script type="text/javascript">window

 Warning: The type attribute for the style element is not needed and should be omitted.
    From line 11, column 1798; to line 11, column 1820
    </script> <style type="text/css">img.wp

Warning: The type attribute for the style element is not needed and should be omitted.
    From line 23, column 193; to line 23, column 251
    a='all' /><style id='kirki-styles-global-inline-css' type='text/css'>.envel

Warning: The type attribute is unnecessary for JavaScript resources.
    From line 23, column 905; to line 23, column 1010
    }</style> <script async type="text/javascript" src="http://....../wp-content/cache/minify/df983.js"></scri

Warning: The type attribute for the style element is not needed and should be omitted.
    From line 70, column 126; to line 70, column 167
    70.png" /><style type="text/css" id="wp-custom-css">@media

Warning: The type attribute is unnecessary for JavaScript resources.
    From line 441, column 156; to line 441, column 261
    iv></div> <script defer type="text/javascript" src="http://......./wp-content/cache/minify/26938.js"></scri

Warning: The type attribute is unnecessary for JavaScript resources.
    From line 441, column 272; to line 441, column 302
    </script> <script type='text/javascript'>/*  */

Warning: The type attribute is unnecessary for JavaScript resources.
    From line 443, column 17; to line 443, column 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 arrastrarse solo en los últimos 3-4 días.ingrese la descripción de la imagen aquí

Ponemos en cola guiones como este →

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 de alguna manera con el método anterior?

Actualización →

Estos son los errores reales. En el cuadro rojo vienen del caché total W3.ingrese la descripción de la imagen aquí


55
el validador W3C rara vez regresa como sin errores para los sitios de Wordpress o cualquier cms popular. parece empeorar cada vez más cada año. El validador (imho) debe usarse como herramientas para revelar algunos errores básicos (como olvidar las altetiquetas u olvidar cerrar una etiqueta), pero no debe considerarse como un estándar como solía ser.
David Sword

lo introdujeron después del 2 de diciembre de 017. antes de eso, mi tema era libre de errores / advertencias. Debería haber alguna forma de deshacerse de ellos.
El WP Intermedio

1
mire dentro del script_loader_taggancho, es posible que pueda hacer una str_replace()para quitarlos.
David Sword

Vale la pena señalar que estas son solo advertencias , no errores. Su sitio aún se validará.
swissspidy

Puede comprobar siguiente respuesta también - stackoverflow.com/a/53380692/2611955
Jahirul Islam Mamun

Respuestas:


16

Puede eliminar los type='*'atributos y valores de wp_enqueuelos scripts y estilos editados, utilizando los respectivos *_loader_tagganchos.

Lo siguiente 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 );
}

Intenté esto, pero no solucionó el problema. Puede ser que necesitemos alguna manipulación.
El WP Intermedio

1
Especulo que algunos de sus scripts de complementos (como los complementos de caché con la deferetiqueta) pueden no estar usando wp_enqueue_scripty luego no usarían *_loader_tag. ¿Puede confirmar que con mi fragmento agregado, en el código fuente de su sitio, custom.jstodavía tiene type='text/javascript'?
David Sword

No. Eliminé el plugin de caché total w3. El error 3/8 desapareció, pero 5 todavía permanecieron.
El WP Intermedio

Bueno, puedes rastrear la fuente de los cinco y ver si es posible editar las etiquetas. Especulo nuevamente que probablemente no lo usen wp_enqueue. Sugiero agregar una ACTUALIZACIÓN a su publicación original para reflejar los 5 obstinados que quedan, con referencias de código y complemento, podría ayudarlo un poco más.
David Sword

Señor, esta vez se actualizaron los errores con la imagen.
El WP Intermedio

12

WordPress 5.3 presenta una forma considerablemente más simple de lograr esto. Al registrar el soporte de temas para HTML 5 para scripty style, type=""se omitirá el atributo:

add_action(
    'after_setup_theme',
    function() {
        add_theme_support( 'html5', [ 'script', 'style' ] );
    }
);

Funcionó gracias.
Michael Rogers

1
Esta es la forma correcta de hacerlo.
Ankit Chauhan

2
¡Buena esa! Esta debería ser la respuesta aceptada.
Joe

3

Obtuve esto del complemento suelo / raíces. hizo el trabajo en su mayor parte.

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

/**
 * Clean up output of stylesheet <link> tags
 */
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;
    }
    // Only display media if it is meaningful
    $media = $matches[3][0] !== '' && $matches[3][0] !== 'all' ? ' media="' . $matches[3][0] . '"' : '';

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

/**
 * Clean up output of <script> tags
 */
function clean_script_tag( $input ) {
    $input = str_replace( "type='text/javascript' ", '', $input );

    return str_replace( "'", '"', $input );
}

¿u probamos este
El WP Intermedio

3

El style_loader_tagy script_loader_tagenfoques anteriores parecen que deben trabajar por cualquier markup Wordpress está generando, en los casos en que el tema / plugin está utilizando las funciones propias enqueue.

Si tiene complementos ofensivos que no cooperan (IIRC Jetpack es / fue un delincuente a menos que sea una versión más nueva ya que mi recuerdo lo ha revisado), y está firme en resolver este problema a pesar de que es probable que sus visitantes no estén impactado de alguna manera (¡su navegador hará que la página esté bien!), siempre puede hacer todo lo posible y usar el búfer 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 );
}

Tenga en cuenta que si bien esta es una solución, no es muy eficiente. Se ejecutará preg_replace()en toda la salida "final" de Wordpress antes de que se envíe al navegador del cliente, para cada solicitud.

El almacenamiento en búfer de salida se activa al inicio ( wp_loadedenlace), es decir, a la derecha cuando wp + theme + plugins + etc. están completamente cargados, y se apaga en el último momento ( shutdownenlace) que se activa justo antes de que PHP cierre la ejecución. La expresión regular debe funcionar a través de todo , ¡y eso podría ser mucho contenido!

Los enfoques style_loader_tagy script_loader_taganteriores 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 tuviera un contenido relativamente estático y utilizara una capa de almacenamiento en caché, podría intentar mitigar la preocupación por el rendimiento.

referencias del manual de php:


Esta es la mejor respuesta y solo funciona correctamente sin errores. Gracias hombre.
Ivijan Stefan Stipić

La única solución de trabajo
Timur Gafforov,

Si alguien tiene curiosidad, WordPress no parece usar los filtros style_loader_tago script_loader_tagal agregar una <script>etiqueta para los scripts en línea . developer.wordpress.org/reference/classes/wp_scripts/…
firxworx

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


La publicación específica a la que hace referencia anteriormente se encuentra en realidad aquí: css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/… Nota: el script está bloqueado, pero al seleccionar el texto, puede léalo y publíquelo arriba. LeoNovais no ofrece ninguna explicación adicional. No sé por qué CSS Tricks oscureció su script.
SherylHohman el

1

De acuerdo con el código en script-loader.php, el atributo de tipo se omite cuando se agrega compatibilidad con temas html5 con guiones y argumentos de estilo.

Ver enlaces a continuación:

function yourthemeprefix_theme_supportt() {
    add_theme_support(
        'html5',
        array(
            'script', // Fix for: The "type" attribute is unnecessary for JavaScript resources.
            'style',  // Fix for: The "type" attribute for the "style" element is not needed and should be omitted.
        )
    );
}
add_action( 'after_setup_theme', 'yourthemeprefix_theme_support' );

0

Edificio a partir de @ realmag77. Esto aprovechará el complemento de optimización automática para poder filtrar TODOS los atributos de tipo, pero no se romperá si no está instalado y activado. El respaldo funciona bien, pero las secuencias de comandos y las hojas de estilo cargadas a través de complementos no se filtrarán. No sé cómo más filtrarlos, pero mediante el uso de la porción de optimización automática.

/* ==========================================
   Remove type attribute on JS/CSS
   (requires Autoptimize plugin and Optimize HTML checked)
   but with fallback just in case
========================================== */

// If Autoptimize is installed and activated, remove type attributes for all 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 {

    // Fallback to remove type attributes except for those loaded through 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 );
    }
}

0
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 );
}

Bienvenido a WPSE, Jeevan. Es útil si incluye una explicación con su respuesta de por qué esto resuelve el problema y cómo funciona.
butlerblog

0

Bueno, porque he probado toneladas de otros códigos y los mencionados aquí, todavía hay rastros de los text/javascriptarchivos principales de WordPress y también de otros códigos de plugin y javascript en línea. Después de probar este código, todo se ha resuelto:

// Remove w3 validator regarding "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 algunos :)

Gracias


-1

Si está experimentando esto con WP Fastest Cache, puede eliminar el atributo de tipo manualmente en el script PHP del complemento, esto también debería funcionar con otros complementos, pero no conozco los archivos donde están agregando el atributo de tipo. Para WP Fastest Cache, debe ir a la carpeta wp-content / plugins / wp-rapid-cache / inc y abrir js-utilities.php, luego buscar texto / javascript y eliminarlo con el atributo. Recibí esa advertencia en W3 Validator y la arreglé de esa manera, también tenga en cuenta que cuando actualice el complemento, ese cambio podría revertirse, para deshabilitar la actualización del complemento, puede editar wpFastestCache y cambiar la versión del complemento a algo como esto 10.0.8.7.7


-1

Puede optimizar el código HTML de su sitio como desee en 2 pasos:

  • Instale este complemento: https://wordpress.org/plugins/autoptimize/
  • Habilite en las opciones del complemento '¿Optimizar código HTML?'
  • En functions.php de tu tema actual de wordpress aplica el siguiente código:

    add_filter ('autoptimize_html_after_minify', función ($ contenido) {

        $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 una barra al final


-1

Puede usar las siguientes funciones para eliminar los atributos de tipo de las etiquetas de enlace y script.

Pegue la función a continuación en functions.php para eliminar el tipo = texto / css de las linketiquetas

/ * Eliminar el atributo "'type = text / css'" de la hoja de estilos * /
función wpse51581_hide_type ($ src) {
    return str_replace ("type = 'text / css'", '', $ src);
}
add_filter ('style_loader_tag', 'wpse51581_hide_type');

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

Pegue la siguiente función en functions.php para eliminar el tipo = 'texto / javascript' de script

// * Eliminar etiqueta de tipo de script y estilo
add_filter ('script_loader_tag', 'codeless_remove_type_attr', 10, 2);
función codeless_remove_type_attr ($ tag, $ handle) {
    return preg_replace ("/ type = ['\"] text \ / (javascript | css) [' \ "] /", '', $ etiqueta);
}

la respuesta es correcta, pero todavía alguien votó negativo
Infoconic
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.