Eliminarea atributului type din tag-urile script și style adăugate de WordPress

5 dec. 2017, 21:05:05
Vizualizări: 62.2K
Voturi: 21
Avertisment: Atributul type este inutil pentru resursele JavaScript.
    De la linia 10, coloana 146; până la linia 10, coloana 176
    feed/" /> <script type="text/javascript">window
   
Avertisment: Atributul type pentru elementul style nu este necesar și ar trebui omis.
    De la linia 11, coloana 1798; până la linia 11, coloana 1820
    </script> <style type="text/css">img.wp
    
Avertisment: Atributul type pentru elementul style nu este necesar și ar trebui omis.
    De la linia 23, coloana 193; până la linia 23, coloana 251
    a='all' /><style id='kirki-styles-global-inline-css' type='text/css'>.envel
    
Avertisment: Atributul type este inutil pentru resursele JavaScript.
    De la linia 23, coloana 905; până la linia 23, coloana 1010
    }</style> <script async type="text/javascript" src="http://....../wp-content/cache/minify/df983.js"></scri
    
Avertisment: Atributul type pentru elementul style nu este necesar și ar trebui omis.
    De la linia 70, coloana 126; până la linia 70, coloana 167
    70.png" /><style type="text/css" id="wp-custom-css">@media
    
Avertisment: Atributul type este inutil pentru resursele JavaScript.
    De la linia 441, coloana 156; până la linia 441, coloana 261
    iv></div> <script defer type="text/javascript" src="http://......./wp-content/cache/minify/26938.js"></scri
    
Avertisment: Atributul type este inutil pentru resursele JavaScript.
    De la linia 441, coloana 272; până la linia 441, coloana 302
    </script> <script type='text/javascript'>/*  */
    
Avertisment: Atributul type este inutil pentru resursele JavaScript.
    De la linia 443, coloana 17; până la linia 443, coloana 122
    </script> <script defer type="text/javascript" src="http://......../wp-content/cache/minify/6ce07.js"></scri

Aceste erori sunt o nouă introducere de la W3C și au început să apară doar în ultimele 3-4 zile.Exemplu de erori W3C pentru atribute type

Noi înregistrăm script-urile astfel →

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

Putem repara acest lucru din metoda de înregistrare de mai sus cumva?

Actualizare →

acestea sunt erorile efective. În caseta roșie sunt cele care provin din W3 Total Cache.Erori W3C din W3 Total Cache

5
Comentarii

validatorul W3C returnează rareori rezultate fără erori pentru site-urile WordPress sau orice alt CMS popular. Se pare că situația se înrăutățește din ce în ce mai mult în fiecare an. Validatorul (după părerea mea) ar trebui folosit ca un instrument pentru a identifica unele erori de bază (cum ar fi uitarea tag-urilor alt sau neglijarea închiderii unui tag), dar nu ar trebui privit ca un standard așa cum era în trecut.

David Sword David Sword
5 dec. 2017 21:11:30

au introdus această funcționalitate după 2 decembrie 2017. Înainte de acea dată, tema mea era lipsită de erori/atenționări. Ar trebui să existe o modalitate de a scăpa de ele.

WordCent WordCent
5 dec. 2017 21:16:37

verifică hook-ul script_loader_tag, poți încerca să folosești str_replace() pentru a le elimina.

David Sword David Sword
5 dec. 2017 22:18:27

Merită să menționăm că acestea sunt doar avertismente, nu erori. Site-ul tău va fi în continuare valid.

swissspidy swissspidy
26 ian. 2018 10:45:03

Poți verifica și următorul răspuns -- https://stackoverflow.com/a/53380692/2611955

Jahirul Islam Mamun Jahirul Islam Mamun
23 sept. 2019 08:24:27
Toate răspunsurile la întrebare 12
5
45

WordPress 5.3 introduce o metodă considerabil mai simplă pentru a realiza acest lucru. Prin înregistrarea suportului temei pentru HTML 5 pentru script și style, atributul type="" va fi omis:

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

acesta este modul corect de a face acest lucru.

Ankit Chauhan Ankit Chauhan
8 ian. 2020 08:13:20

Foarte bine! Acesta ar trebui să fie răspunsul acceptat.

Joe Joe
15 ian. 2020 17:10:03

Poți să specifici unde (în ce fișier) ar trebui să pun codul de mai sus?

yaylitzis yaylitzis
21 mai 2020 14:02:44

Nu elimină atributul type din linia cu 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>. Acest lucru se datorează https://core.trac.wordpress.org/ticket/51837

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

Puteți elimina atributele type='*' și valorile acestora din scripturile și stilurile încărcate cu wp_enqueue, folosind cârligele respective *_loader_tag.

Următoarea soluție a funcționat pentru mine:

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 dec. 2017 23:37:33
Comentarii

Am încercat asta, dar nu a rezolvat problema. Poate avem nevoie de o anumită manipulare.

WordCent WordCent
5 dec. 2017 23:45:28

Presupun că unele dintre scripturile tale din pluginuri (cum ar fi cele ale pluginului de cache cu tag-ul defer) poate nu folosesc wp_enqueue_script și astfel nu ar folosi *_loader_tag. Poți să confirmi că, cu fragmentul meu adăugat, în codul sursă al site-ului tău, custom.js are încă type='text/javascript'?

David Sword David Sword
5 dec. 2017 23:56:09

Nu. Am șters pluginul w3 total cache. 3 din 8 erori au dispărut, dar 5 au rămas.

WordCent WordCent
5 dec. 2017 23:59:32

Puteți încerca să urmăriți sursa celor cinci și să vedeți dacă este posibil să editați tag-urile. Presupun din nou că probabil nu folosesc wp_enqueue. Vă sugerez să adăugați un UPDATE la postarea originală pentru a reflecta cele 5 rămase încăpățânate, cu referințe la cod și plugin-uri - s-ar putea să mai putem ajuta.

David Sword David Sword
6 dec. 2017 00:14:43

Domnule, am actualizat erorile de data aceasta cu imaginea.

WordCent WordCent
6 dec. 2017 04:31:09

& ce plugin generează acele fișiere */cache/minify/*.js?

David Sword David Sword
6 dec. 2017 04:38:32

domnule, W3 Total Cache Plugin. w3 a introdus aceste avertismente după 2 decembrie. Dacă puneți orice site WP în validator, veți vedea aceste avertismente.

WordCent WordCent
6 dec. 2017 04:50:45

Mulțumesc David, asta a funcționat pentru majoritatea problemelor mele, dar mai sunt câteva de rezolvat. Mai bine decât nimic!

Jordan Carter Jordan Carter
22 feb. 2018 06:51:51
Arată celelalte 3 comentarii
1

Am obținut acest cod din plugin-ul soil / roots. A funcționat în mare parte.

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

/**
 * Curăță output-ul tag-urilor <link> pentru fișierele CSS
 */
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;
    }
    // Afișează media doar dacă are sens
    $media = $matches[3][0] !== '' && $matches[3][0] !== 'all' ? ' media="' . $matches[3][0] . '"' : '';

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

/**
 * Curăță output-ul tag-urilor <script>
 */
function clean_script_tag( $input ) {
    $input = str_replace( "type='text/javascript' ", '', $input );

    return str_replace( "'", '"', $input );
}
20 dec. 2017 17:54:21
Comentarii

ai încercat asta

WordCent WordCent
20 dec. 2017 21:58:19
3

Abordările style_loader_tag și script_loader_tag menționate mai sus ar trebui să funcționeze pentru orice markup generat de WordPress, în cazurile în care tema/pluginul utilizează funcțiile corecte de încărcare (enqueue).

Dacă aveți pluginuri care nu cooperează (Jetpack a fost/s-ar putea să fie unul dintre ele, dacă versiunile mai noi nu au rezolvat problema!), și sunteți ferm hotărât să rezolvați această problemă în ciuda faptului că vizitatorii dumneavoastră nu vor fi afectați (browserul lor va afișa pagina corect!), puteți recurge la buffering-ul de ieșire:

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

Atenție: deși aceasta este o soluție, nu este foarte eficientă. Veți rula preg_replace() pe întregul conținut final al WordPress înainte de a fi trimis browserului clientului, pentru fiecare cerere.

Buffering-ul de ieșire este pornit la început (cu hook-ul wp_loaded), adică atunci când WordPress, tema, pluginurile etc. sunt încărcate complet, și este oprit în ultimul moment (cu hook-ul shutdown), care rulează chiar înainte ca PHP să încheie execuția. Regex-ul trebuie să proceseze totul, iar acest lucru poate implica mult conținut!

Abordările style_loader_tag și script_loader_tag rulează regex-ul doar pe un șir foarte mic (tag-ul în sine), astfel încât impactul asupra performanței este neglijabil.

Presupun că, dacă aveți conținut relativ static și utilizați un strat de caching, ați putea încerca să atenuați problema de performanță.

Referințe din manualul php:

24 mai 2018 05:22:20
Comentarii

Acesta este cel mai bun răspuns și funcționează corect fără erori. Mulțumesc, omule.

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

Singura soluție care funcționează

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

Dacă cineva este curios, WordPress nu pare să utilizeze filtrele style_loader_tag sau script_loader_tag atunci când adaugă un tag <script> pentru scripturile inline. https://developer.wordpress.org/reference/classes/wp_scripts/print_inline_script/

firxworx firxworx
13 nov. 2018 21:50:45
1

Acest cod m-a ajutat foarte mult:

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

Mulțumiri lui css-tricks (LeoNovais): https://css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/#post-246425

31 ian. 2018 09:30:32
Comentarii

Postul specific la care se referă OP-ul de mai sus se află de fapt aici: https://css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/#post-246425 Notă: scriptul este mascat, dar prin selectarea textului, îl puteți citi, așa cum este postat mai sus. LeoNovais nu oferă nicio explicație suplimentară. Nu știu de ce CSS Tricks a mascat scriptul său.

SherylHohman SherylHohman
13 ian. 2019 21:54:51
0

Conform codului din script-loader.php, atributul type este omis atunci când suportul pentru temă html5 este adăugat cu argumentele script și style.

Consultați linkurile de mai jos:

function yourthemeprefix_theme_supportt() {
    add_theme_support(
        'html5',
        array(
            'script', // Corecție pentru: Atributul "type" este inutil pentru resursele JavaScript.
            'style',  // Corecție pentru: Atributul "type" pentru elementul "style" nu este necesar și ar trebui omis.
        )
    );
}
add_action( 'after_setup_theme', 'yourthemeprefix_theme_support' );
16 dec. 2019 12:32:57
0

Extinderea soluției @realmag77. Aceasta va folosi pluginul Autoptimize pentru a filtra TOATE atributele de tip, dar nu va cauza probleme dacă nu este instalat și activat. Soluția alternativă funcționează bine, dar scripturile și fișierele de stil încărcate prin pluginuri nu vor fi filtrate. Nu cunosc alt mod de a le filtra decât prin utilizarea porțiunii Autoptimize.

/* ==========================================
   Elimină atributul type din JS/CSS
   (necesită pluginul Autoptimize și opțiunea Optimize HTML bifată)
   dar cu o soluție alternativă pentru orice eventualitate
========================================== */

// Dacă Autoptimize este instalat și activat, elimină atributele type pentru toate 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 {

    // Soluție alternativă pentru a elimina atributele type, cu excepția celor încărcate prin pluginuri
    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
// Adaugă acțiunea 'wp_loaded' pentru a porni buffer-ul de ieșire
add_action('wp_loaded', 'prefix_output_buffer_start');
function prefix_output_buffer_start() { 
    // Pornește buffer-ul de ieșire cu funcția de callback
    ob_start("prefix_output_callback"); 
}

// Adaugă acțiunea 'shutdown' pentru a încheia buffer-ul de ieșire
add_action('shutdown', 'prefix_output_buffer_end');
function prefix_output_buffer_end() { 
    // Trimite conținutul buffer-ului și oprește buffering-ul
    ob_end_flush(); 
}

// Funcția de callback pentru procesarea buffer-ului
function prefix_output_callback($buffer) {
    // Elimină atributul 'type="text/javascript"' sau 'type="text/css"' din HTML
    return preg_replace( "%[ ]type=[\'\"]text\/(javascript|css)[\'\"]%", '', $buffer );
}
1 mai 2019 12:42:34
Comentarii

Bun venit pe WPSE, Jeevan. Este util să incluzi o explicație cu răspunsul tău despre de ce această soluție rezolvă problema și cum funcționează.

butlerblog butlerblog
1 mai 2019 14:28:03
1

Puteți utiliza funcțiile de mai jos pentru a elimina atributele de tip din tag-urile de legătură și script.

Lipiți funcția de mai jos în functions.php pentru a elimina type=text/css din tag-urile link

/* Elimină atributul " 'type=text/css' " din fișierele de stil */
function wpse51581_hide_type($src) {
    return str_replace("type='text/css'", '', $src);
}
add_filter('style_loader_tag', 'wpse51581_hide_type');

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

Lipiți funcția de mai jos în functions.php pentru a elimina type='text/javascript' din tag-urile script

//* Elimină atributul type din tag-urile script și 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
Comentarii

răspunsul este corect, dar totuși cineva a votat negativ

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

Ei bine, pentru că am încercat o mulțime de alte coduri și cele menționate aici, încă există urme ale text/javascript din fișierele de bază WordPress și, de asemenea, din alte pluginuri și coduri JavaScript inline. După ce am testat acest cod, totul a fost rezolvat:

// Elimină eroarea de validare w3 referitoare la "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 );
}

Sper că poate ajuta pe cineva :)

Mulțumesc

6 dec. 2019 01:13:13
0
-1

Dacă întâmpinați această problemă cu WP Fastest Cache, puteți șterge manual atributul type din scriptul PHP al plugin-ului. Această soluție ar trebui să funcționeze și cu alte plugin-uri, dar nu știu exact în ce fișiere este adăugat atributul type. Pentru WP Fastest Cache, trebuie să accesați folderul wp-content/plugins/wp-fastest-cache/inc și să deschideți fișierul js-utilities.php, apoi să căutați text/javascript și să ștergeți acel atribut. Am avut această avertizare în W3 Validator și am rezolvat-o în acest fel. De asemenea, rețineți că la actualizarea plugin-ului, această modificare ar putea fi anulată. Pentru a dezactiva actualizarea plugin-ului, puteți edita wpFastestCache și să schimbați versiunea plugin-ului la ceva de genul 10.0.8.7.7

19 mar. 2018 00:07:01
0
-1

Puteți optimiza codul HTML al site-ului dvs. după preferință în 2 pași:

  • Instalați acest plugin: https://wordpress.org/plugins/autoptimize/
  • Activați în opțiunile plugin-ului 'Optimize HTML Code?'
  • În functions.php din tema WordPress curentă aplicați următorul cod:

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

    și nu uitați să schimbați $site_url cu link-ul site-ului dvs. fără slash la sfârșit

10 mai 2018 14:54:39