Rimuovere l'attributo type dai tag script e style aggiunti da WordPress

5 dic 2017, 21:05:05
Visualizzazioni: 62.2K
Voti: 21
Attenzione: L'attributo type non è necessario per le risorse JavaScript.
    Dalla riga 10, colonna 146; alla riga 10, colonna 176
    feed/" /> <script type="text/javascript">window
   
Attenzione: L'attributo type per l'elemento style non è necessario e dovrebbe essere omesso.
    Dalla riga 11, colonna 1798; alla riga 11, colonna 1820
    </script> <style type="text/css">img.wp
    
Attenzione: L'attributo type per l'elemento style non è necessario e dovrebbe essere omesso.
    Dalla riga 23, colonna 193; alla riga 23, colonna 251
    a='all' /><style id='kirki-styles-global-inline-css' type='text/css'>.envel
    
Attenzione: L'attributo type non è necessario per le risorse JavaScript.
    Dalla riga 23, colonna 905; alla riga 23, colonna 1010
    }</style> <script async type="text/javascript" src="http://....../wp-content/cache/minify/df983.js"></scri
    
Attenzione: L'attributo type per l'elemento style non è necessario e dovrebbe essere omesso.
    Dalla riga 70, colonna 126; alla riga 70, colonna 167
    70.png" /><style type="text/css" id="wp-custom-css">@media
    
Attenzione: L'attributo type non è necessario per le risorse JavaScript.
    Dalla riga 441, colonna 156; alla riga 441, colonna 261
    iv></div> <script defer type="text/javascript" src="http://......./wp-content/cache/minify/26938.js"></scri
    
Attenzione: L'attributo type non è necessario per le risorse JavaScript.
    Dalla riga 441, colonna 272; alla riga 441, colonna 302
    </script> <script type='text/javascript'>/*  */
    
Attenzione: L'attributo type non è necessario per le risorse JavaScript.
    Dalla riga 443, colonna 17; alla riga 443, colonna 122
    </script> <script defer type="text/javascript" src="http://......../wp-content/cache/minify/6ce07.js"></scri

Questi errori sono una nuova introduzione da parte del W3C e hanno iniziato a comparire solo negli ultimi 3-4 giorni.Esempio di errori W3C relativi agli attributi type

Registriamo gli script in questo modo →

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

Possiamo correggere questo problema dal metodo di enqueuing mostrato sopra?

Aggiornamento →

questi sono gli errori effettivi. Nel box rosso provengono da W3 Total Cache.Screenshot degli errori effettivi di W3 Total Cache

5
Commenti

il validatore W3C raramente restituisce siti WordPress o altri CMS popolari privi di errori. Sembra peggiorare sempre di più ogni anno. Il validatore (a mio parere) dovrebbe essere usato come strumento per rivelare alcuni errori di base (come dimenticare i tag alt o non chiudere un tag), ma non dovrebbe essere considerato uno standard come accadeva in passato.

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

lo hanno introdotto dopo il 2 dicembre 2017. Prima di quella data il mio tema era privo di errori/avvisi. Dovrebbe esserci un modo per eliminarli.

WordCent WordCent
5 dic 2017 21:16:37

dai un'occhiata all'hook script_loader_tag, potresti essere in grado di usare str_replace() per rimuoverli.

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

Vale la pena sottolineare che questi sono solo avvisi, non errori. Il tuo sito passerà comunque la validazione.

swissspidy swissspidy
26 gen 2018 10:45:03

Puoi controllare anche questa risposta -- https://stackoverflow.com/a/53380692/2611955

Jahirul Islam Mamun Jahirul Islam Mamun
23 set 2019 08:24:27
Tutte le risposte alla domanda 12
5
45

WordPress 5.3 introduce un modo considerevolmente più semplice per ottenere questo risultato. Registrando il supporto del tema per HTML 5 per script e style, l'attributo type="" verrà omesso:

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

questo è il modo corretto per farlo.

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

Ottimo! Questa dovrebbe essere la risposta accettata.

Joe Joe
15 gen 2020 17:10:03

Potresti specificare dove (in quale file) dovrei inserire il codice sopra?

yaylitzis yaylitzis
21 mag 2020 14:02:44

Non rimuove il tipo dalla riga 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>. Questo è dovuto a https://core.trac.wordpress.org/ticket/51837

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

Puoi rimuovere gli attributi type='*' e i relativi valori dagli script e stili caricati con wp_enqueue, utilizzando i rispettivi hook *_loader_tag.

Il seguente codice ha funzionato per me:

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
Commenti

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

WordCent WordCent
5 dic 2017 23:45:28

Suppongo che alcuni dei tuoi script dei plugin (come quelli del plugin di cache con il tag defer) potrebbero non utilizzare wp_enqueue_script e quindi non userebbero *_loader_tag. Puoi confermare che, con il mio snippet aggiunto, nel codice sorgente del tuo sito, custom.js abbia ancora type='text/javascript'?

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

No. Ho eliminato il plugin w3 total cache. 3 degli 8 errori sono scomparsi, ma ne rimangono ancora 5.

WordCent WordCent
5 dic 2017 23:59:32

Puoi individuare l'origine dei cinque e vedere se è possibile modificare i tag. Speculo ancora che probabilmente non usano wp_enqueue. Suggerisco di aggiungere un AGGIORNAMENTO al tuo post originale per riflettere gli ostinati 5 rimasti, con riferimenti al codice e ai plugin - potrei essere in grado di aiutare ulteriormente.

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

Signore, ho aggiornato gli errori con l'immagine questa volta.

WordCent WordCent
6 dic 2017 04:31:09

& quale plugin genera quei file */cache/minify/*.js?

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

signore, il plugin W3 Total Cache. W3 ha introdotto questi avvisi dopo il 2 dicembre. Metti qualsiasi sito WP nel validatore e vedrai questi avvisi.

WordCent WordCent
6 dic 2017 04:50:45

Grazie David, questo ha funzionato per la maggior parte dei miei, ma ce ne sono ancora alcuni da sistemare. Meglio di niente!

Jordan Carter Jordan Carter
22 feb 2018 06:51:51
Mostra i restanti 3 commenti
1

Ho ottenuto questo dal plugin soil / roots. Ha funzionato per la maggior parte.

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

/**
 * Pulizia dell'output dei tag <link> dei fogli di stile
 */
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;
    }
    // Mostra il media solo se è significativo
    $media = $matches[3][0] !== '' && $matches[3][0] !== 'all' ? ' media="' . $matches[3][0] . '"' : '';

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

/**
 * Pulizia dell'output dei tag <script>
 */
function clean_script_tag( $input ) {
    $input = str_replace( "type='text/javascript' ", '', $input );

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

hai provato questo

WordCent WordCent
20 dic 2017 21:58:19
3

Gli approcci style_loader_tag e script_loader_tag sopra menzionati sembrano funzionare per qualsiasi markup generato da WordPress, nei casi in cui il tema/plugin utilizza le funzioni di enqueue appropriate.

Se hai plugin problematici che non cooperano (se memoria non mi inganna Jetpack è/stato uno di questi, a meno che una versione più recente non abbia risolto il problema!), e sei determinato a risolvere questa questione nonostante il fatto che i tuoi visitatori difficilmente ne saranno influenzati (il loro browser renderizzerà la pagina senza problemi!), puoi sempre optare per una soluzione radicale usando l'output buffering:

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. Dovrai eseguire preg_replace() sull'intero output "finale" di WordPress prima che venga inviato al browser del client, per ogni richiesta.

L'output buffering viene attivato all'inizio (hook wp_loaded), cioè proprio quando WordPress + tema + plugin + ecc. sono completamente caricati, e viene disattivato all'ultimo momento (hook shutdown) che viene eseguito appena prima che PHP termini l'esecuzione. L'espressione regolare deve elaborare tutto, e potrebbero esserci molti contenuti!

Gli approcci style_loader_tag e script_loader_tag sopra menzionati eseguono l'espressione regolare solo su una stringa molto piccola (il tag stesso), quindi l'impatto sulle prestazioni è trascurabile.

Suppongo che se avessi contenuti relativamente statici e utilizzassi un layer di caching potresti cercare di mitigare il problema delle prestazioni.

Riferimenti dal manuale PHP:

24 mag 2018 05:22:20
Commenti

Questa è la risposta migliore e funziona correttamente senza errori. Grazie mille.

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

L'unica soluzione funzionante

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

Se qualcuno è curioso, WordPress non sembra utilizzare i filtri style_loader_tag o script_loader_tag quando aggiunge un tag <script> per script inline. https://developer.wordpress.org/reference/classes/wp_scripts/print_inline_script/

firxworx firxworx
13 nov 2018 21:50:45
1

Questo mi è stato molto utile:

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

31 gen 2018 09:30:32
Commenti

Il post specifico a cui si riferisce l'OP sopra si trova in realtà qui: https://css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/#post-246425 Nota: lo script è annerito, ma selezionando il testo è possibile leggerlo, come riportato sopra. LeoNovais non fornisce ulteriori spiegazioni. Non so perché CSS Tricks abbia annerito il suo script.

SherylHohman SherylHohman
13 gen 2019 21:54:51
0

Secondo il codice in script-loader.php, l'attributo type viene omesso quando il supporto per html5 è aggiunto al tema con gli argomenti script e style.

Vedi i link qui sotto:

function yourthemeprefix_theme_supportt() {
    add_theme_support(
        'html5',
        array(
            'script', // Correzione per: L'attributo "type" non è necessario per le risorse JavaScript.
            'style',  // Correzione per: L'attributo "type" per l'elemento "style" non è necessario e dovrebbe essere omesso.
        )
    );
}
add_action( 'after_setup_theme', 'yourthemeprefix_theme_support' );
16 dic 2019 12:32:57
0

Basandosi su @realmag77. Questo codice sfrutterà il plugin Autoptimize per filtrare TUTTI gli attributi type senza rompere il sito se non è installato e attivato. Il fallback funziona bene ma gli script e i fogli di stile caricati tramite plugin non verranno filtrati. Non conosco altri modi per filtrarli se non utilizzando la parte di Autoptimize.

/* ==========================================
   Rimuovi l'attributo type su JS/CSS
   (richiede il plugin Autoptimize e l'opzione "Ottimizza HTML" attivata)
   ma con un fallback per sicurezza
========================================== */

// Se Autoptimize è installato e attivo, rimuove gli attributi type per tutti i 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 per rimuovere gli attributi type eccetto quelli caricati tramite plugin
    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 mag 2019 12:42:34
Commenti

Benvenuto su WPSE, Jeevan. È utile se includi una spiegazione nella tua risposta del perché questa soluzione risolve il problema e come funziona.

butlerblog butlerblog
1 mag 2019 14:28:03
1

Puoi utilizzare le funzioni qui sotto per rimuovere gli attributi type dai tag link e script.

Incolla la funzione seguente in functions.php per rimuovere il type=text/css dai tag link

/* Rimuove l'attributo " 'type=text/css' " dagli stylesheet  */
function wpse51581_hide_type($src) {
    return str_replace("type='text/css'", '', $src);
}
add_filter('style_loader_tag', 'wpse51581_hide_type');

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

Incolla la funzione seguente in functions.php per rimuovere il type='text/javascript' dai tag script

//* Rimuove il type tag dagli script e 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
Commenti

la risposta è corretta ma qualcuno ha comunque votato negativamente

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

Bene, perché ho provato tonnellate di altri codici e quelli menzionati qui, ci sono ancora tracce di text/javascript dai file core di WordPress e anche da altri plugin e codici javascript inline. Dopo aver testato questo codice, tutto è stato risolto:

// Rimuove l'avviso del validatore w3 riguardo "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 possa aiutare qualcuno :)

Grazie

6 dic 2019 01:13:13
0
-1

Se stai riscontrando questo problema con WP Fastest Cache, puoi eliminare manualmente l'attributo type nello script PHP del plugin. Questo metodo dovrebbe funzionare anche con altri plugin, ma non conosco i file specifici in cui aggiungono l'attributo type. Per WP Fastest Cache, devi andare nella cartella wp-content/plugins/wp-fastest-cache/inc e aprire il file js-utilities.php, poi cerca text/javascript ed eliminalo insieme all'attributo. Ho risolto così un avviso ricevuto su W3 Validator. Tieni presente che quando aggiornerai il plugin questa modifica potrebbe essere annullata. Per disabilitare gli aggiornamenti del plugin puoi modificare wpFastestCache e cambiare la versione del plugin con qualcosa tipo 10.0.8.7.7

19 mar 2018 00:07:01
0
-1

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

  • Installa questo plugin: https://wordpress.org/plugins/autoptimize/
  • Abilita nelle opzioni del plugin 'Ottimizza codice HTML?'
  • Nel file functions.php del tuo tema WordPress corrente applica il seguente codice:

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

    e non dimenticare di cambiare $site_url con il link del tuo sito senza slash alla fine

10 mag 2018 14:54:39