Entfernen Sie das Typattribut aus den von WordPress hinzugefügten Skript- und Stil-Tags


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

Diese Fehler sind eine neue Einführung von W3C und haben sich erst in den letzten 3-4 Tagen eingeschlichen.Geben Sie hier die Bildbeschreibung ein

Wir stellen solche Skripte in die Warteschlange →

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

Können wir das irgendwie mit der obigen Einreihmethode beheben?

Update →

Dies sind die tatsächlichen Fehler. In der roten Box kommen aus dem W3 Total Cache.Geben Sie hier die Bildbeschreibung ein


5
Der W3C-Validator wird für Wordpress-Sites oder gängige CMS selten als fehlerfrei zurückgegeben. es scheint von Jahr zu Jahr schlimmer zu werden. Der Validator (imho) sollte als Hilfsmittel verwendet werden, um einige grundlegende Fehler aufzudecken (z. B. das Vergessen von altTags oder das Vergessen, ein Tag zu schließen), sollte jedoch nicht wie früher als Standard betrachtet werden.
David Sword

Sie haben es nach dem 2. Dezember 017 eingeführt. Vorher war mein Thema fehler- / warnfrei. Es sollte einen Weg geben, sie loszuwerden.
Die WP Intermediate

1
Wenn Sie in den script_loader_tagHaken schauen , können Sie möglicherweise einen str_replace()entfernen.
David Sword

Es sei darauf hingewiesen, dass dies nur Warnungen und keine Fehler sind. Ihre Website wird weiterhin validiert.
swissspidy

Sie können folgende Antwort auch überprüfen - stackoverflow.com/a/53380692/2611955
Jahirul Islam Mamun

Antworten:


16

Sie können die type='*'Attribute und Werte wp_enqueuemithilfe der entsprechenden *_loader_tagHooks aus den Ed-Skripten und -Stilen entfernen .

Folgendes hat bei mir funktioniert:

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

Ich habe es versucht, aber es hat das Problem nicht behoben. Vielleicht brauchen wir etwas Manipulation.
Die WP Intermediate

1
Ich spekuliere, dass einige Ihrer Skripte von Plugins (wie die Cache-Plugins mit dem deferTag) möglicherweise nicht verwendet werden wp_enqueue_scriptund dann nicht verwendet werden *_loader_tag. Können Sie bestätigen , bitte , dass mit meinem Schnipsel auf den Quellcode Ihrer Website hinzugefügt, das custom.jshat type='text/javascript'noch?
David Sword

Ich habe das W3 Total Cache Plugin gelöscht. 3/8 Fehler verschwand, aber 5 blieben noch.
Die WP Intermediate

Nun, Sie können die Quelle der fünf aufspüren und sehen, ob es möglich ist, die Tags zu bearbeiten. Ich spekuliere noch einmal, dass sie wahrscheinlich nicht verwenden wp_enqueue. Ich schlage vor, Ihrem ursprünglichen Beitrag ein UPDATE hinzuzufügen, um die hartnäckigen 5 verbleibenden Links mit Code- und Plugin-Referenzen wiederzugeben - möglicherweise können Sie noch mehr helfen.
David Sword

Sir, diesmal wurden die Fehler mit dem Bild aktualisiert.
Die WP Intermediate

11

WordPress 5.3 bietet eine wesentlich einfachere Möglichkeit, dies zu erreichen. Wenn Sie die Themenunterstützung für HTML 5 für scriptund registrieren style, wird das type=""Attribut weggelassen:

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

Es hat funktioniert, danke.
Michael Rogers

1
Dies ist der richtige Weg, um es zu tun.
Ankit Chauhan

2
Schön! Dies sollte die akzeptierte Antwort sein.
Joe

3

Habe dies vom Boden / Wurzeln Plugin. hat den Job zum größten Teil gemacht.

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


3

Die obigen style_loader_tagund script_loader_tagAnsätze sehen so aus, als ob sie für jedes Markup funktionieren sollten, das Wordpress generiert, in Fällen, in denen das Thema / Plugin die richtigen Enqueue-Funktionen verwendet.

Wenn Sie beleidigende Plugins haben, die nicht kooperieren (IIRC Jetpack ist / war ein Täter, es sei denn, eine neuere Version seit meiner Erinnerung hat dies überarbeitet!), Und Sie sind fest entschlossen , dieses Problem zu lösen, obwohl Ihre Besucher dies wahrscheinlich nicht tun In irgendeiner Weise beeinflusst (ihr Browser wird die Seite in Ordnung bringen!), können Sie immer alles daran setzen und die Ausgabepufferung verwenden:

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

Seien Sie gewarnt, dass dies zwar eine Lösung ist, aber nicht sehr effizient. Sie würden preg_replace()die gesamte "endgültige" Ausgabe von Wordpress ausführen, bevor sie für jede Anforderung an den Browser des Clients gesendet wird.

Die Ausgabepufferung wird zu Beginn ( wp_loadedHook) aktiviert, dh rechts, wenn wp + theme + plugins + etc vollständig geladen sind, und im letzten Moment ( shutdownhook) deaktiviert, der ausgelöst wird, kurz bevor PHP die Ausführung beendet. Der Regex muss alles durcharbeiten , und das könnte eine Menge Inhalt sein!

Bei den obigen Ansätzen style_loader_tagund script_loader_tagwird der reguläre Ausdruck nur für eine sehr kleine Zeichenfolge (das Tag selbst) ausgeführt, sodass die Auswirkungen auf die Leistung vernachlässigbar sind.

Ich nehme an, wenn Sie relativ statischen Inhalt hatten und eine Caching-Ebene verwendeten, könnten Sie versuchen, die Leistungsprobleme zu verringern.

PHP Handbuch Referenzen:


Dies ist die beste Antwort und funktioniert nur ohne Fehler. Danke, Mann.
Ivijan Stefan Stipić

Die einzige funktionierende Lösung
Timur Gafforov

Wenn jemand neugierig ist, scheint WordPress die Filter style_loader_tagoder nicht zu verwenden script_loader_tag, wenn ein <script>Tag für Inline- Skripte hinzugefügt wird . developer.wordpress.org/reference/classes/wp_scripts/…
firxworx

1

Das hat mir sehr geholfen:

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

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


Der spezifische Beitrag, auf den sich OP oben bezieht, befindet sich tatsächlich hier: css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/… Hinweis: Das Skript ist schwarz, aber durch Auswahl des Textes können Sie Lesen Sie es und wie oben angegeben. LeoNovais bietet keine zusätzliche Erklärung. Ich weiß nicht, warum CSS Tricks sein Skript verdunkelt haben.
SherylHohman

1

Laut Code in der Skript-Loader.php Typ Attribute, wenn html5 Theme - Unterstützung verzichtet wird mit Skript und Stil Argumenten hinzugefügt.

Siehe unten stehende Links:

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

Aufbauend auf @ Realmag77. Dadurch wird das Autoptimize-Plugin genutzt, um ALLE Typattribute herauszufiltern, aber nicht zu beschädigen, wenn es nicht installiert und aktiviert ist. Der Fallback funktioniert einwandfrei, aber die über Plugins geladenen Skripte und Stylesheets werden nicht gefiltert. Ich weiß nicht, wie ich sie filtern soll, außer über den Autoptimize-Teil.

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

Willkommen bei WPSE, Jeevan. Es ist hilfreich, wenn Sie Ihrer Antwort eine Erklärung hinzufügen, warum dies das Problem löst und wie es funktioniert.
Butlerblog

0

Nun, da ich Tonnen anderer Codes und der hier erwähnten ausprobiert habe, gibt es immer noch Spuren text/javascriptvon WordPress-Kerndateien und auch von anderen Plugin- und Inline-Javascript-Codes. Nach dem Testen dieses Codes wurde alles behoben:

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

Hoffe es kann einigen helfen :)

Vielen Dank


-1

Wenn dies mit WP Fastest Cache auftritt, können Sie das Typattribut manuell im Plugin-PHP-Skript löschen. Dies sollte auch mit anderen Plugins funktionieren, aber ich kenne keine Dateien, in denen das Typattribut hinzugefügt wird. Für WP Fastest Cache sollten Sie in den Ordner wp-content / plugins / wp-schnellster-cache / inc gehen und js-utilities.php öffnen, dann nach Text / Javascript suchen und es mit dem Attribut löschen. Ich hatte diese Warnung auf W3 Validator und habe sie auf diese Weise behoben. Beachten Sie auch, dass Sie beim Aktualisieren des Plugins diese Änderung rückgängig machen können. Um die Plugin-Aktualisierung zu deaktivieren, können Sie wpFastestCache bearbeiten und die Plugin-Version auf so etwas wie 10.0.8.7.7 ändern


-1

Sie können den HTML-Code Ihrer Site in zwei Schritten nach Ihren Wünschen optimieren:

  • Installieren Sie dieses Plugin: https://wordpress.org/plugins/autoptimize/
  • Aktivieren Sie in den Plugin-Optionen "HTML-Code optimieren?"
  • Wenden Sie in functions.php Ihres aktuellen WordPress-Themas den nächsten Code an:

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

    und vergessen Sie nicht, $ site_url in Ihren Site-Link ohne Schrägstrich am Ende zu ändern


-1

Mit den folgenden Funktionen können Sie Typattribute aus Link- und Skript-Tags entfernen.

Fügen Sie die folgende Funktion in die Datei functions.php ein, um den Typ = text / css aus den linkTags zu entfernen

/ * Entferne das Attribut "'type = text / css'" aus dem Stylesheet * /
Funktion wpse51581_hide_type ($ src) {
    return str_replace ("type = 'text / css'", '', $ src);
}}
add_filter ('style_loader_tag', 'wpse51581_hide_type');

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

Fügen Sie die folgende Funktion in functions.php ein, um den Typ = 'text / javascript' aus zu entfernen script

// * Typ-Tag aus Skript und Stil entfernen
add_filter ('script_loader_tag', 'codeless_remove_type_attr', 10, 2);
Funktion codeless_remove_type_attr ($ tag, $ handle) {
    return preg_replace ("/ type = ['\"] text \ / (javascript | css) [' \ "] /", '', $ tag);
}}

Die Antwort ist richtig, aber immer noch hat jemand negativ gestimmt
Infoconic
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.