Rimuovi l'attributo type dallo script e dai tag di stile aggiunti da 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

Questi errori sono una nuova introduzione del W3C e hanno iniziato a insinuarsi solo negli ultimi 3-4 giorni.inserisci qui la descrizione dell'immagine

Accodiamo script come questo →

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

Possiamo risolvere questo dal metodo di accodamento sopra in qualche modo?

Aggiorna →

questi sono gli errori reali. Nella casella rossa provengono dalla cache totale W3.inserisci qui la descrizione dell'immagine


5
il validatore W3C raramente ritorna come privo di errori per i siti Wordpress o per tutti i popolari cms. sembra peggiorare ogni anno. Il validatore (imho) dovrebbe essere usato come strumento per rivelare alcuni errori di base (come dimenticare i alttag o dimenticare di chiudere un tag), ma non dovrebbe essere considerato come uno standard come una volta.
David Sword,

l'hanno introdotto dopo il 2 dicembre 017. prima che il mio tema fosse privo di errori / avvertenze. Dovrebbe esserci un modo per liberarsene.
Il WP intermedio il

1
guarda nel script_loader_taggancio, potresti essere in grado di fare un str_replace()per rimuoverli.
David Sword,

Vale la pena sottolineare che questi sono solo avvertimenti , non errori. Il tuo sito verrà comunque convalidato.
swissspidy,

È possibile controllare seguente risposta anche - stackoverflow.com/a/53380692/2611955
Jahirul Islam Mamun

Risposte:


16

Puoi rimuovere gli type='*'attributi e i valori dagli wp_enqueuescript e dagli stili, usando i rispettivi *_loader_taghook.

Per me ha funzionato:

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

Ho provato questo, ma non ha risolto il problema. Forse abbiamo bisogno di qualche manipolazione.
Il WP intermedio il

1
Suppongo che alcuni dei tuoi script dei plugin (come quelli di cache con il defertag) potrebbero non essere utilizzati wp_enqueue_scripte quindi non utilizzarli *_loader_tag. Potete per favore confermare che con il mio frammento aggiunto, sul codice sorgente del vostro sito, che custom.jsha type='text/javascript'ancora?
David Sword,

No. Ho eliminato il plug-in cache totale w3. L'errore 3/8 è scomparso, ma rimangono ancora 5.
Il WP intermedio il

Bene, puoi rintracciare la fonte dei cinque e vedere se è possibile modificare i tag. Ho ipotizzato di nuovo che probabilmente non usano wp_enqueue. Suggerisco di aggiungere un AGGIORNAMENTO al tuo post originale per riflettere la testarda 5 rimasta, con riferimenti a codice e plugin - potrebbe essere in grado di aiutarti ancora.
David Sword,

Signore, questa volta ho aggiornato gli errori con l'immagine.
Il WP intermedio il

12

WordPress 5.3 introduce un modo considerevolmente più semplice per raggiungere questo obiettivo. Registrando il supporto temi per HTML 5 per scripte style, l' type=""attributo verrà omesso:

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

Ha funzionato grazie.
Michael Rogers,

1
questo è il modo corretto di farlo.
Ankit Chauhan

2
Ben fatto! Questa dovrebbe essere la risposta accettata.
Joe

3

Ho preso questo dal plugin ground / roots. ha fatto il lavoro per la maggior 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 );
}

hai provato questo
The WP Intermediate

3

Gli approcci style_loader_tage script_loader_tagsopra sembrano come dovrebbero funzionare per qualunque markup stia generando Wordpress, nei casi in cui il tema / plugin stia usando le funzioni di accodamento appropriate.

Se hai plugin offensivi che non collaborano (IIRC Jetpack è / era un trasgressore a meno che una versione più recente dal momento che il mio ricordo non l'abbia rivisto!), E sei irremovibile nel risolvere questo problema nonostante il fatto che i tuoi visitatori non sono probabilmente influenzato in alcun modo (il loro browser renderà la pagina corretta!), puoi sempre fare tutto e usare il buffering dell'output:

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

Tieni presente che, sebbene questa sia una soluzione, non è molto efficiente. Saresti in esecuzione preg_replace()sull'intero "finale" output di Wordpress prima che venga inviato al browser del client, per ogni richiesta.

Il buffering dell'output è attivato all'inizio ( wp_loadedhook), cioè a destra quando wp + theme + plugins + etc sono completamente caricati e si spegne all'ultimo momento ( shutdownhook) che si attiva subito prima che PHP interrompa l'esecuzione. La regex deve funzionare su tutto , e questo potrebbe essere un sacco di contenuti!

Gli approcci style_loader_tage script_loader_tagprecedenti eseguono il regex solo su una stringa molto piccola (il tag stesso), quindi l'impatto sulle prestazioni è trascurabile.

Suppongo che se avessi un contenuto relativamente statico e utilizzassi un livello di cache, potresti provare a mitigare il problema delle prestazioni.

riferimenti manuali php:


Questa è la risposta migliore e funziona correttamente solo senza errori. Grazie uomo.
Ivijan Stefan Stipić,

L'unica soluzione funzionante
Timur Gafforov,

Se qualcuno è curioso, WordPress non sembra usare i filtri style_loader_tago script_loader_tagquando si aggiunge un <script>tag per gli script incorporati . developer.wordpress.org/reference/classes/wp_scripts/…
firxworx

1

Questo mi ha aiutato molto:

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

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


Il post specifico di cui sopra fa riferimento in realtà è qui: css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/… Nota: lo script è oscurato, ma selezionando il testo è possibile leggilo, e come pubblicato sopra. LeoNovais non offre alcuna spiegazione aggiuntiva. Non so perché CSS Tricks ha oscurato la sua sceneggiatura.
SherylHohman

1

Secondo il codice nello script-loader.php l' attributo type viene omesso quando viene aggiunto il supporto del tema html5 con argomenti di script e di stile.

Vedi sotto i collegamenti:

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

In costruzione di @ realmag77. Ciò sfrutterà il plug-in Autoptimize per poter filtrare TUTTI gli attributi di tipo ma non rompersi se non è installato e attivato. Il fallback funziona bene, ma quegli script e fogli di stile caricati attraverso i plugin non verranno filtrati. Non so come altro filtrarli ma usando la porzione di Ottimizzazione automatica.

/* ==========================================
   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 );
}

Benvenuti in WPSE, Jeevan. È utile se includi una spiegazione con la tua risposta sul perché questo risolve il problema e su come funziona.
butlerblog,

0

Bene, poiché ho provato tonnellate di altri codici e quelli menzionati qui, ci sono ancora tracce dei text/javascriptfile core di WordPress e anche di altri plugin e codici javascript in linea. Dopo aver testato questo codice, tutto è stato risolto:

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

Spero che possa essere d'aiuto :)

Grazie


-1

Se lo riscontri con WP Fastest Cache puoi eliminare manualmente l'attributo type nello script PHP del plug-in, questo dovrebbe funzionare anche con altri plug-in, ma non conosco i file in cui stanno aggiungendo l'attributo type. Per WP Fastest Cache dovresti andare nella cartella wp-content / plugins / wp-fast-cache / inc e aprire js-utilities.php quindi cercare text / javascript ed eliminarlo con l'attributo. Ho avuto quell'avvertimento su W3 Validator e l'ho risolto in questo modo, inoltre tieni presente che quando aggiornerai il plug-in che la modifica potrebbe essere ripristinata, per disabilitare l'aggiornamento del plug-in puoi modificare wpFastestCache e cambiare la versione del plug-in in qualcosa del genere 10.0.8.7.7


-1

Puoi ottimizzare il codice HTML del tuo sito come desideri in 2 passaggi:

  • Installa questo plugin: https://wordpress.org/plugins/autoptimize/
  • Abilita nelle opzioni del plug-in "Ottimizza codice HTML?"
  • In Functions.php del tuo attuale tema wordpress applica il prossimo codice:

    add_filter ('autoptimize_html_after_minify', funzione ($ 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);

    e non dimenticare di cambiare $ site_url al link del tuo sito senza barra alla fine


-1

È possibile utilizzare le funzioni seguenti per rimuovere gli attributi di tipo dai tag link e script.

Incolla la seguente funzione in Functions.php per rimuovere type = text / css dai linktag

/ * Rimuovi l'attributo "'type = text / css'" dal foglio di stile * /
funzione wpse51581_hide_type ($ src) {
    return str_replace ("type = 'text / css'", '', $ src);
}
add_filter ('style_loader_tag', 'wpse51581_hide_type');

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

Incolla la seguente funzione in Functions.php per rimuovere type = 'text / javascript' da script

// * Rimuove il tag di tipo dallo script e dallo stile
add_filter ('script_loader_tag', 'codeless_remove_type_attr', 10, 2);
funzione codeless_remove_type_attr ($ tag, $ handle) {
    return preg_replace ("/ type = ['\"] text \ / (javascript | css) [' \ "] /", '', $ tag);
}

la risposta è corretta ma qualcuno ha votato negativamente
Infoconic il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.