Видаліть атрибут типу з тегів сценарію та стилю, доданих 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

Ці помилки - це нове впровадження W3C, і вони почали повзати лише протягом останніх 3-4 днів.введіть тут опис зображення

Ми задаємо такі сценарії →

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

Чи можемо ми якось виправити це за допомогою вищезазначеного методу завоювання?

Оновити →

це фактичні помилки. У червоному полі надходять з загального кешу W3.введіть тут опис зображення


5
валідатор W3C рідко повертається як помилковий для веб-сайтів Wordpress або будь-яких популярних cms. здається, щороку стає все гірше і гірше. Валідатор (imho) слід використовувати як інструмент для виявлення основних помилок (наприклад, забування altтегів або забуття закрити тег), але не слід розглядати його як стандарт, як це було раніше.
Давид Меч

вони представили його після 2 грудня 017 р. до цього моєю темою було помилки / попередження. Повинно їх позбутися.
Проміжний рівень WP

1
загляньте в script_loader_tagгачок, можливо, ви зможете зробити їх, str_replace()щоб видалити їх.
Давид Меч

Варто зазначити, що це лише попередження , а не помилки. Ваш веб-сайт все ще буде підтверджений.
swissspidy

Ви можете перевірити таку відповідь також - stackoverflow.com/a/53380692/2611955
Jahirul Іслам Мамун

Відповіді:


16

Ви можете видалити type='*'атрибути та значення з wp_enqueue'ed сценаріїв та стилів, використовуючи відповідні *_loader_tagгачки.

Для мене працювало наступне:

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

Я спробував це, але це не вирішило проблему. Можливо, нам потрібні певні маніпуляції.
Проміжний рівень WP

1
Я припускаю, що деякі з ваших скриптів із плагінів (як-от кеши-плагіни з deferтегом) можуть не використовуватись wp_enqueue_scriptі не використовуватимуться *_loader_tag. Чи можете ви підтвердити, що доданий мій фрагмент у вихідному коді вашого сайту все ще custom.jsє type='text/javascript'?
Меч Девіда

Ні. Я видалив модуль загального кешу w3. 3/8 помилка зникла, але 5 все-таки залишилося.
Проміжний рівень WP

Добре ви можете відстежити джерело п'яти і побачити, чи можливо редагувати теги. Я знову розмірковую, що вони, мабуть, не використовують wp_enqueue. Я пропоную додати ОНОВЛЕННЯ до своєї оригінальної публікації, щоб відобразити вперті 5 зліва, з посиланням на код та плагін - можливо, ви можете допомогти ще трохи.
Давид Меч

Сер, цього разу оновив помилки із зображенням.
Проміжний рівень WP

14

WordPress 5.3 пропонує значно простіший спосіб досягти цього. Зареєструвавши підтримку теми для HTML 5 для scriptі style, type=""атрибут буде опущено:

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

Це спрацювало завдяки.
Майкл Роджерс

1
це правильний спосіб зробити це.
Анкіт Чаухан

2
Хороший! Це має бути прийнятою відповіддю.
Джо

3

Отримав це з плагіна грунт / коріння. зробили роботу здебільшого.

    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

style_loader_tagІ script_loader_tagпідходи вище виглядають , як вони повинні працювати для будь-якої розмітки Wordpress генерує, в тих випадках , коли тема / плагін , використовуючи відповідні функції Епдіеіх.

Якщо у вас є кривдні плагіни, які не співпрацюють (IIRC Jetpack є / був правопорушником, якщо не з’явилася нова версія, оскільки мої спогади переглянули це!), І ви твердо налаштовані вирішити цю проблему, незважаючи на те, що ваші відвідувачі, ймовірно, не будуть. будь-яким впливом (їхній веб-переглядач призведе до виправлення сторінки!), ви завжди можете вимкнути та використовувати буферизацію вихідних даних:

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

Попереджуйте, що, хоча це рішення, це не дуже ефективно. Ви будете працювати preg_replace()на весь "остаточний" вихід з Wordpress, перш ніж він буде надісланий у браузер клієнта, для кожного запиту.

Буферизація виводу вмикається на початку ( wp_loadedгак), тобто право, оскільки wp + тема + плагіни + тощо повністю завантажені, і вимикається в останній момент ( shutdownгак), який запускається перед тим, як PHP завершує виконання. Регекс повинен працювати через все , і це може бути багато вмісту!

Наведені вище style_loader_tagта script_loader_tagпідходи лише виконують регулярний вираз по дуже невеликій рядку (сам тег), тому вплив на продуктивність незначний.

Я вважаю, що якщо ви мали відносно статичний вміст і використовували шар кешування, ви можете спробувати пом’якшити занепокоєння щодо продуктивності.

посилання на керівництво PHP:


Це найкраща відповідь і працює належним чином без помилок. Спасибі людина.
Івіджан Стефан Стипіч

Єдине робоче рішення
Тимур Гаффоров

Якщо хтось цікавий, WordPress, здається, не використовує style_loader_tagабо script_loader_tagфільтрує, додаючи <script>тег для вбудованих сценаріїв. developer.wordpress.org/reference/classes/wp_scripts/…
firxworx

1

Це мені дуже допомогло:

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

Завдяки css-трюкам (LeoNovais): https://css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/#post-246425


Конкретна публікація, про яку йдеться вище, насправді тут: css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/… Примітка: сценарій затьмарений, але, вибравши текст, ви можете прочитайте його, і це, як розміщено вище. LeoNovais не пропонує додаткових пояснень. Я не знаю, чому CSS Tricks викрив його сценарій.
SherylHohman

1

Відповідно до коду в script-loader.php атрибут типу пропущено, коли додається підтримка теми html5 з аргументами сценарію та стилю.

Дивіться посилання нижче:

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

Будівництво з @ realmag77. Це дозволить використовувати плагін для автоматичного оптимізації, щоб мати можливість фільтрувати всі атрибути типу, але не розбиватися, якщо він не встановлений та активований. Резервна робота працює добре, але ті сценарії та таблиці стилів, завантажені через плагіни, не фільтруються. Я не знаю, як інакше відфільтрувати їх, але за допомогою використання частини 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 );
}

Ласкаво просимо до WPSE, Jeevan. Корисно, якщо ви додасте пояснення зі своєю відповіддю, чому це вирішує проблему та як вона працює.
butlerblog

0

Ну а тому, що я спробував безліч інших кодів і тих, що згадуються тут, досі є сліди text/javascriptвід основних файлів WordPress, а також від інших кодів плагінів та вбудованих javascript. Після тестування цього коду все було вирішено:

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

Сподіваюсь, це може дещо допомогти :)

Дякую


-1

Якщо ви відчуваєте це за допомогою WP Fastest Cache, ви можете видалити атрибут типу вручну в PHP-скрипті плагіна, це також має працювати з іншими плагінами, але я не знаю файлів, де вони додають атрибут типу. Для найшвидшого кешу WP слід перейти до папки wp-content / plugins / wp-fastest-cache / inc та відкрити js-utilities.php, після чого шукати текст / javascript і видалити його з атрибутом. У мене було це попередження на W3 Validator і виправлено це таким чином, також майте на увазі, що коли ви оновлюєте плагін, що зміна може бути повернуто, щоб вимкнути оновлення плагіна, ви можете відредагувати wpFastestCache та змінити версію плагіна на щось подібне до цього 10.0.8.7.7


-1

Ви можете оптимізувати HTML-код свого веб-сайту за вашим бажанням за два етапи:

  • Встановіть цей плагін: https://wordpress.org/plugins/autoptimize/
  • Увімкнути параметри плагіна "Оптимізувати HTML-код?"
  • У function.php поточної теми Wordpress застосуйте наступний код:

    add_filter ('autoptimize_html_after_minify', функція ($ вміст) {

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

    і не забудьте змінити $ site_url на посилання на ваш сайт без косого кінця


-1

Ви можете використовувати функції нижче, щоб видалити атрибути типу із тегів посилань та сценаріїв.

Вставте функцію нижче в function.php для видалення type = text / css з linkтегів

/ * Видаліть атрибут "'type = text / css'" з таблиці стилів * /
функція wpse51581_hide_type ($ src) {
    return str_replace ("type = 'text / css'", '', $ src);
}
add_filter ('style_loader_tag', 'wpse51581_hide_type');

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

Вставте функцію нижче у function.php для видалення типу = 'text / javascript' з script

// * Видаліть тег типу зі сценарію та стилю
add_filter ('script_loader_tag', 'codeless_remove_type_attr', 10, 2);
функція codeless_remove_type_attr ($ тег, $ ручка) {
    повернути preg_replace ("/ type = ['\"] текст \ / (javascript | css) [' \ "] /", '', $ tag);
}

відповідь правильна, але все-таки хтось проголосував негативно
Infoconic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.