Usuń atrybut typu ze znaczników skryptów i stylów dodanych przez 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

Te błędy są nowym wprowadzeniem W3C i zaczęły pełzać tylko w ciągu ostatnich 3-4 dni.wprowadź opis zdjęcia tutaj

Kolejkujemy takie skrypty →

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

Czy możemy jakoś to naprawić z powyższej metody kolejkowania?

Aktualizacja →

to są rzeczywiste błędy. W czerwonym polu pochodzą z całkowitej pamięci podręcznej W3.wprowadź opis zdjęcia tutaj


5
Walidator W3C rzadko powraca jako bezbłędny dla stron Wordpress lub jakichkolwiek popularnych cms. wydaje się, że z każdym rokiem jest coraz gorzej. Walidator (imho) powinien być używany jako narzędzie do ujawniania niektórych podstawowych błędów (takich jak zapominanie o alttagach lub zapominanie o zamknięciu tagu), ale nie powinien być traktowany jako standard jak kiedyś.
David Sword,

wprowadzili go po 2 grudnia 017 roku. wcześniej mój motyw był wolny od błędów / ostrzeżeń. Powinien być jakiś sposób na pozbycie się ich.
WP Średnio zaawansowany

1
zajrzyj do script_loader_taghaka, być może będziesz w stanie str_replace()je usunąć.
David Sword,

Warto zauważyć, że są to tylko ostrzeżenia , a nie błędy. Twoja strona nadal będzie sprawdzana.
swissspidy

Możesz również sprawdzić następującą odpowiedź - stackoverflow.com/a/53380692/2611955
Jahirul Islam Mamun

Odpowiedzi:


16

Możesz usunąć type='*'atrybuty i wartości z wp_enqueueedytowanych skryptów i stylów, używając odpowiednich *_loader_tagzaczepów.

Dla mnie działało:

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

Próbowałem tego, ale to nie rozwiązało problemu. Być może potrzebujemy trochę manipulacji.
WP Średnio zaawansowany

1
Spekuluję, że niektóre twoje skrypty z wtyczek (jak te z wtyczką pamięci podręcznej z defertagiem) mogą nie być używane wp_enqueue_scripti wtedy nie będą używane *_loader_tag. Można Proszę potwierdzić, że z moim fragment dodany na kodzie źródłowym swojej stronie, że custom.jsma type='text/javascript'nadal?
David Sword,

Nie. Usunąłem wtyczkę całkowitej pamięci podręcznej w3. Błąd 3/8 zniknął, ale 5 pozostało.
WP Średnio zaawansowany

Możesz wyśledzić źródło tych pięciu i sprawdzić, czy można edytować tagi. Spekuluję ponownie, że prawdopodobnie nie używają wp_enqueue. Sugeruję dodanie AKTUALIZACJI do twojego oryginalnego postu, aby odzwierciedlić uparte 5 po lewej, z odniesieniami do kodu i wtyczki - może być w stanie pomóc trochę więcej.
David Sword,

Sir, tym razem zaktualizowałem błędy obrazu.
WP Średnio zaawansowany

14

WordPress 5.3 wprowadza znacznie prostszy sposób na osiągnięcie tego. Rejestrując obsługę motywów dla HTML 5 dla scripti style, type=""atrybut zostanie pominięty:

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

Działa dzięki.
Michael Rogers

1
to jest właściwy sposób, aby to zrobić.
Ankit Chauhan

2
Niezłe! To powinna być zaakceptowana odpowiedź.
Joe

3

Mam to z wtyczki gleba / korzenie. wykonał robotę w przeważającej części.

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

próbowałeś tego
WP Intermediate

3

Powyższe style_loader_tagi script_loader_tagpowyższe podejścia wyglądają, jakby powinny działać niezależnie od generowanego przez Wordpress znacznika, w przypadkach, gdy motyw / wtyczka korzysta z odpowiednich funkcji kolejkowania.

Jeśli masz obrażające wtyczki, które nie współpracują (IIRC Jetpack jest / był przestępcą, chyba że nowsza wersja od czasu moich wspomnień to poprawiła!), I jesteś nieugięty w rozwiązaniu tego problemu, pomimo faktu, że Twoi użytkownicy prawdopodobnie nie będą w jakikolwiek sposób (ich przeglądarka sprawi, że strona będzie dobrze!), zawsze możesz przejść na całość i użyć buforowania danych wyjściowych:

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

Ostrzegamy, że chociaż jest to rozwiązanie, nie jest zbyt wydajne. Będziesz działał preg_replace()na całym „końcowym” wyjściu Wordpressa, zanim zostanie ono wysłane do przeglądarki klienta, dla każdego żądania.

Buforowanie danych wyjściowych jest włączane na początku ( wp_loadedhook), tj. Zaraz po pełnym załadowaniu wp + theme + plugins + etc, i jest wyłączane w ostatniej chwili ( shutdownhook), która jest uruchamiana tuż przed wyłączeniem PHP. Wyrażenie regularne musi przejść przez wszystko , a to może być dużo treści!

Powyższe podejścia style_loader_tagi script_loader_taguruchamiają wyrażenie regularne tylko na bardzo małym ciągu (sam znacznik), więc wpływ na wydajność jest znikomy.

Podejrzewam, że jeśli miałeś względnie statyczną zawartość i używałeś warstwy buforowania, możesz spróbować złagodzić problemy z wydajnością.

odnośniki do instrukcji php:


To najlepsza odpowiedź i działa poprawnie tylko bez błędów. Dzięki stary.
Ivijan Stefan Stipić

Jedyne działające rozwiązanie
Timur Gafforov

Jeśli ktoś jest ciekawy, WordPress nie używa filtrów style_loader_taglub script_loader_tagpodczas dodawania <script>znacznika dla skryptów wbudowanych . developer.wordpress.org/reference/classes/wp_scripts/…
firxworx

1

To bardzo mi pomogło:

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

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


Konkretny post PO, o którym mowa powyżej, faktycznie jest tutaj: css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/... Uwaga: skrypt jest zaciemniony, ale wybierając tekst, możesz przeczytaj to i jak napisano powyżej. LeoNovais nie oferuje żadnych dodatkowych wyjaśnień. Nie wiem, dlaczego sztuczki CSS zaciemniły jego skrypt.
SherylHohman

1

Zgodnie z kodem w script-loader.php atrybut typu jest pomijany, gdy dodawana jest obsługa motywu HTML5 z argumentami skryptu i stylu.

Zobacz poniższe linki:

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

Budowanie z @ realmag77. Wykorzysta to wtyczkę Autoptimize, aby móc odfiltrować WSZYSTKIE atrybuty typu, ale nie zepsuć się, jeśli nie zostanie zainstalowana i aktywowana. Funkcja rezerwowa działa dobrze, ale skrypty i arkusze stylów ładowane przez wtyczki nie będą filtrowane. Nie wiem, jak inaczej je filtrować, ale używając części Autoptimize.

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

Witamy w WPSE, Jeevan. Przydaje się wyjaśnienie wraz z odpowiedzią, dlaczego rozwiązuje problem i jak działa.
butlerblog

0

Cóż, ponieważ próbowałem mnóstwo innych kodów i wymienionych tutaj, nadal istnieją ślady text/javascriptz plików podstawowych WordPress, a także z innych wtyczek i wbudowanych kodów javascript. Po przetestowaniu tego kodu wszystko zostało rozwiązane:

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

Mam nadzieję, że to może pomóc :)

Dziękuję Ci


-1

Jeśli występuje ten problem z najszybszą pamięcią podręczną WP, możesz ręcznie usunąć atrybut typu w skrypcie PHP wtyczki, powinno to również działać z innymi wtyczkami, ale nie znam plików, do których dodają atrybut typu. W przypadku najszybszej pamięci podręcznej WP należy przejść do folderu wp-content / plugins / wp-najszybszy-cache / inc i otworzyć plik js-utilities.php, a następnie wyszukać tekst / javascript i usunąć go za pomocą atrybutu. Miałem to ostrzeżenie na walidatorze W3 i naprawiłem to w ten sposób, pamiętaj również, że kiedy zaktualizujesz wtyczkę, zmiana ta może zostać cofnięta, aby wyłączyć aktualizację wtyczki, możesz edytować wpFastestCache i zmienić wersję wtyczki na coś takiego 10.0.8.7.7


-1

Możesz zoptymalizować kod HTML swojej witryny w 2 krokach:

  • Zainstaluj tę wtyczkę: https://wordpress.org/plugins/autoptimize/
  • Włącz w opcjach wtyczki „Zoptymalizować kod HTML?”
  • W funkcji.php bieżącego motywu Wordpress zastosuj następny kod:

    add_filter ('autoptimize_html_after_minify', funkcja ($ 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 nie zapomnij zmienić $ site_url na link do strony bez ukośnika na końcu


-1

Możesz użyć poniższych funkcji, aby usunąć atrybuty typu ze znaczników link i script.

Wklej poniższą funkcję w functions.php, aby usunąć typ = text / css ze linkznaczników

/ * Usuń atrybut „'type = text / css'” z arkusza stylów * /
funkcja wpse51581_hide_type ($ src) {
    return str_replace ("type = 'text / css'", '', $ src);
}
add_filter ('style_loader_tag', 'wpse51581_hide_type');

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

Wklej poniższą funkcję w functions.php w celu usunięcia z type = 'text / javascript' script

// * Usuń tag typu ze skryptu i stylu
add_filter ('script_loader_tag', 'codeless_remove_type_attr', 10, 2);
funkcja codeless_remove_type_attr (tag $, uchwyt $) {
    return preg_replace ("/ type = ['\"] text \ / (javascript | css) [' \ "] /", "', $ tag);
}

odpowiedź jest prawidłowa, ale nadal ktoś głosował negatywnie
Infoconic
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.