Supprimer l'attribut de type des balises de script et de style ajoutées par 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

Ces erreurs sont une nouvelle introduction du W3C et elles ont commencé à se glisser dans les 3-4 derniers jours seulement.entrez la description de l'image ici

Nous mettons en file d'attente des scripts comme celui-ci →

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

Pouvons-nous résoudre ce problème à partir de la méthode de mise en file d'attente ci-dessus?

Mettre à jour →

ce sont les erreurs réelles. Dans la case rouge viennent du cache total W3.entrez la description de l'image ici


5
le validateur W3C renvoie rarement comme sans erreur pour les sites Wordpress ou tout cms populaire. cela semble empirer de plus en plus chaque année. Le validateur (imho) doit être utilisé comme outil pour révéler certaines erreurs de base (comme oublier les altbalises ou oublier de fermer une balise), mais ne doit pas être considéré comme un standard comme il l'était auparavant.
David Sword

ils l'ont introduit après le 2 décembre 017. avant cela, mon thème était sans erreur / avertissement. Il devrait y avoir un moyen de s'en débarrasser.
Le WP Intermédiaire

1
regardez dans le script_loader_tagcrochet, vous pourrez peut-être faire un str_replace()pour les retirer.
David Sword

Il convient de souligner que ce ne sont que des avertissements , pas des erreurs. Votre site sera toujours validé.
swissspidy

Vous pouvez également vérifier la réponse suivante - stackoverflow.com/a/53380692/2611955
Jahirul Islam Mamun

Réponses:


16

Vous pouvez supprimer les type='*'attributs et les valeurs wp_enqueuedes scripts et styles édités à l'aide des *_loader_tagcrochets respectifs .

Ce qui suit a fonctionné pour moi:

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

J'ai essayé cela, mais cela n'a pas résolu le problème. Peut-être avons-nous besoin d'une manipulation.
Le WP Intermédiaire

1
Je spécule que certains de vos scripts de plugins (comme ceux du plugin de cache avec la deferbalise) peuvent ne pas utiliser wp_enqueue_scriptet ne l'utiliseraient pas *_loader_tag. Pouvez-vous s'il vous plaît confirmer qu'avec mon extrait de code ajouté, sur le code source de votre site, cela custom.jsa type='text/javascript'encore?
David Sword

Non, j'ai supprimé le plugin de cache total w3. L'erreur 3/8 a disparu, mais 5 sont restées.
Le WP Intermédiaire

Eh bien, vous pouvez retrouver la source des cinq et voir s'il est possible de modifier les balises. Je spécule encore une fois qu'ils n'utilisent probablement pas wp_enqueue. Je suggère d'ajouter une MISE À JOUR à votre message d'origine pour refléter la gauche tenace, avec des références de code et de plugin - pourrait être en mesure d'aider un peu plus.
David Sword

Monsieur, Mis à jour les erreurs avec l'image cette fois.
Le WP Intermédiaire

12

WordPress 5.3 introduit un moyen considérablement plus simple d'y parvenir. En enregistrant la prise en charge des thèmes pour HTML 5 pour scriptet style, l' type=""attribut sera omis:

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

Cela a fonctionné grâce.
Michael Rogers

1
c'est la bonne façon de procéder.
Ankit Chauhan

2
Joli! Cela devrait être la réponse acceptée.
Joe

3

J'ai obtenu cela du plugin sol / racines. a fait le travail pour la plupart.

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

avez-vous essayé cela
The WP Intermediate

3

Les approches style_loader_taget script_loader_tagci-dessus semblent fonctionner pour tout balisage généré par Wordpress, dans les cas où le thème / plugin utilise les fonctions de mise en file d'attente appropriées.

Si vous avez des plugins offensants qui ne coopèrent pas (IIRC Jetpack est / était un contrevenant à moins qu'une version plus récente depuis que je me souvienne ait révisé cela!), Et vous êtes catégorique sur la résolution de ce problème malgré le fait que vos visiteurs ne seront probablement pas impacté de quelque façon que ce soit (leur navigateur rendra la page très bien!), vous pouvez toujours aller à fond et utiliser la mise en mémoire tampon de sortie:

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

Soyez averti que bien que ce soit une solution, elle n'est pas très efficace. Vous devez exécuter preg_replace()l'intégralité de la sortie "finale" de Wordpress avant qu'elle ne soit envoyée au navigateur du client, pour chaque demande.

La mise en mémoire tampon de sortie est activée au début ( wp_loadedhook), c'est-à-dire à droite lorsque wp + theme + plugins + etc sont complètement chargés, et est désactivée au dernier moment ( shutdownhook) qui se déclenche juste avant que PHP ne ferme l'exécution. Le regex doit fonctionner à travers tout , et cela pourrait être beaucoup de contenu!

Les approches style_loader_taget script_loader_tagci-dessus exécutent uniquement l'expression régulière sur une très petite chaîne (la balise elle-même), de sorte que l'impact sur les performances est négligeable.

Je suppose que si vous avez un contenu relativement statique et que vous utilisez une couche de mise en cache, vous pouvez essayer d'atténuer le problème de performances.

références du manuel php:


C'est la meilleure réponse et ne fonctionne correctement que sans erreur. Merci mec.
Ivijan Stefan Stipić

La seule solution de travail
Timur Gafforov

Si quelqu'un est curieux, WordPress ne semble pas utiliser les filtres style_loader_tagou script_loader_taglors de l'ajout d'une <script>balise pour les scripts en ligne . developer.wordpress.org/reference/classes/wp_scripts/…
firxworx

1

Cela m'a beaucoup aidé:

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

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


Le poste spécifique auquel OP ci-dessus fait référence est en fait ici: css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/… Remarque: le script est noirci, mais en sélectionnant le texte, vous pouvez lisez-le, et comme indiqué ci-dessus. LeoNovais n'offre aucune explication supplémentaire. Je ne sais pas pourquoi CSS Tricks a masqué son script.
SherylHohman

1

Selon le code dans script-loader.php, l' attribut de type est omis lorsque la prise en charge du thème html5 est ajoutée avec des arguments de script et de style.

Voir les liens ci-dessous:

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

Construire hors de @ realmag77. Cela exploitera le plugin Autoptimize pour être en mesure de filtrer TOUS les attributs de type mais ne se cassera pas s'il n'est pas installé et activé. La solution de secours fonctionne bien, mais ces scripts et feuilles de style chargés via des plugins ne seront pas filtrés. Je ne sais pas comment les filtrer autrement qu'en utilisant la partie 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 );
}

Bienvenue à WPSE, Jeevan. Il est utile si vous incluez une explication dans votre réponse expliquant pourquoi cela résout le problème et comment cela fonctionne.
butlerblog

0

Eh bien, parce que j'ai essayé des tonnes d'autres codes et ceux mentionnés ici, il y a encore des traces des text/javascriptfichiers de base WordPress et également d'autres plugins et codes javascript en ligne. Après avoir testé ce code, tout a été résolu:

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

J'espère que cela peut aider certains :)

Je vous remercie


-1

Si vous rencontrez ce problème avec WP Fastest Cache, vous pouvez supprimer l'attribut type manuellement dans le script PHP du plugin, cela devrait également fonctionner avec d'autres plugins, mais je ne connais pas les fichiers où ils ajoutent l'attribut type. Pour WP Fastest Cache, vous devez aller dans le dossier wp-content / plugins / wp-rapid-cache / inc et ouvrir js-utilities.php, puis rechercher text / javascript et le supprimer avec l'attribut. J'ai eu cet avertissement sur le validateur W3 et l'ai corrigé de cette façon, sachez également que lorsque vous mettrez à jour le plugin, cette modification pourrait être annulée, pour désactiver la mise à jour du plugin, vous pouvez modifier wpFastestCache et changer la version du plugin en quelque chose comme ceci 10.0.8.7.7


-1

Vous pouvez optimiser le code HTML de votre site comme vous le souhaitez en 2 étapes:

  • Installez ce plugin: https://wordpress.org/plugins/autoptimize/
  • Activez dans les options du plugin 'Optimiser le code HTML?'
  • Dans functions.php de votre thème wordpress actuel, appliquez le code suivant:

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

    et n'oubliez pas de changer $ site_url en votre lien de site sans barre oblique à la fin


-1

Vous pouvez utiliser les fonctions ci-dessous pour supprimer les attributs de type des balises de lien et de script.

Collez la fonction ci-dessous dans functions.php pour supprimer le type = text / css des linkbalises

/ * Supprimer l'attribut "'type = text / css'" de la feuille de style * /
fonction wpse51581_hide_type ($ src) {
    return str_replace ("type = 'text / css'", '', $ src);
}
add_filter ('style_loader_tag', 'wpse51581_hide_type');

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

Collez la fonction ci-dessous dans functions.php pour supprimer le type = 'text / javascript' de script

// * Supprimer la balise type du script et du style
add_filter ('script_loader_tag', 'codeless_remove_type_attr', 10, 2);
fonction codeless_remove_type_attr ($ tag, $ handle) {
    return preg_replace ("/ type = ['\"] text \ / (javascript | css) [' \ "] /", '', $ tag);
}

la réponse est correcte mais toujours quelqu'un a voté négatif
Infoconic
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.