Xóa thuộc tính loại khỏi tập lệnh và thẻ kiểu được thêm bởi 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

Những lỗi này là một số giới thiệu mới của W3C và chúng đã bắt đầu leo ​​chỉ trong 3-4 ngày qua.nhập mô tả hình ảnh ở đây

Chúng tôi enqueue script như thế này →

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

Chúng ta có thể khắc phục điều này từ phương pháp mê hoặc ở trên không?

Cập nhật →

đây là những lỗi thực tế Trong hộp màu đỏ đang đến từ tổng bộ đệm W3.nhập mô tả hình ảnh ở đây


5
trình xác nhận W3C hiếm khi trả về là không có lỗi đối với các trang Wordpress hoặc bất kỳ cms phổ biến nào. nó dường như đang trở nên tồi tệ hơn và tồi tệ hơn mỗi năm. Trình xác nhận (imho) nên được sử dụng làm công cụ để phát hiện một số lỗi cơ bản (như quên altthẻ hoặc quên đóng thẻ), nhưng không nên xem là tiêu chuẩn như trước đây.
David Sword

họ đã giới thiệu nó sau ngày 2 tháng 12 năm 017. trước đó chủ đề của tôi không có lỗi / cảnh báo. Nên có một số cách để thoát khỏi chúng.
Trung cấp WP

1
nhìn vào script_loader_tagcái móc, bạn có thể làm một cái str_replace()để loại bỏ chúng.
David Sword

Đáng để chỉ ra rằng đây chỉ là những cảnh báo , không phải lỗi. Trang web của bạn vẫn sẽ xác nhận.
swissspidy

Bạn cũng có thể kiểm tra câu trả lời sau - stackoverflow.com/a/53380692/2611955
Jahirul Islam Mamun

Câu trả lời:


16

Bạn có thể xóa các type='*'thuộc tính và giá trị khỏi wp_enqueuecác tập lệnh và kiểu 'ed, sử dụng các *_loader_taghook tương ứng .

Sau đây làm việc cho tôi:

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

Tôi đã thử điều này, nhưng nó không khắc phục được vấn đề. Có thể chúng ta cần một số thao tác.
Trung cấp WP

1
Tôi suy đoán rằng một số tập lệnh của bạn từ các plugin (như các plugin bộ nhớ cache có deferthẻ) có thể không được sử dụng wp_enqueue_scriptvà sau đó sẽ không sử dụng *_loader_tag. Bạn có thể vui lòng xác nhận rằng với đoạn mã của tôi được thêm vào, trên mã nguồn của trang web của bạn, điều custom.jsđó type='text/javascript'vẫn còn không?
David Sword

Không. Tôi đã xóa plugin w3 tổng bộ đệm. Lỗi 3/8 biến mất, nhưng 5 vẫn còn.
Trung cấp WP

Vâng, bạn có thể theo dõi nguồn của năm và xem nếu có thể chỉnh sửa các thẻ. Tôi suy đoán lại rằng họ có thể không sử dụng wp_enqueue. Tôi đề nghị thêm một CẬP NHẬT vào bài viết gốc của bạn để phản ánh 5 phần cứng đầu còn lại, với các tham chiếu mã và plugin - có thể có thể giúp thêm một số.
David Sword

Thưa ông, đã cập nhật các lỗi với hình ảnh lần này.
Trung cấp WP

12

WordPress 5.3 giới thiệu một cách đơn giản hơn đáng kể để đạt được điều này. Bằng cách đăng ký hỗ trợ chủ đề cho HTML 5 cho scriptstyle, type=""thuộc tính sẽ bị bỏ qua:

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

Nó làm việc cảm ơn.
Michael Rogers

1
Đây là cách chính xác để làm điều đó.
Ankit Chauhan

2
Đẹp quá Đây phải là câu trả lời được chấp nhận.
Joe

3

Có cái này từ plugin đất / rễ. đã làm công việc cho hầu hết các phần.

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

bạn đã thử điều này chưa
Trung cấp WP

3

Các style_loader_tagscript_loader_tagphương pháp tiếp cận trên trông giống như họ nên làm việc cho bất cứ điều gì đánh dấu Wordpress được tạo ra, trong trường hợp chủ đề / plugin đang sử dụng các chức năng enqueue thích hợp.

Nếu bạn có các plugin vi phạm không hợp tác (IIRC Jetpack là / là người vi phạm trừ khi phiên bản mới hơn do hồi ức của tôi đã sửa đổi điều này!), Và bạn rất kiên quyết giải quyết vấn đề này mặc dù thực tế là khách truy cập của bạn không có khả năng bị ảnh hưởng theo bất kỳ cách nào (trình duyệt của họ sẽ hiển thị trang tốt!), bạn luôn có thể truy cập toàn bộ và sử dụng bộ đệm đầu ra:

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

Được cảnh báo rằng trong khi đây là một giải pháp, nó không hiệu quả lắm. Bạn sẽ chạy preg_replace()trên toàn bộ đầu ra "cuối cùng" từ Wordpress trước khi nó được gửi đến trình duyệt của máy khách, cho mọi yêu cầu.

Bộ đệm đầu ra được bật khi bắt đầu ( wp_loadedhook), tức là ngay khi wp + theme + plugin + etc được tải đầy đủ và bị tắt vào giây phút cuối ( shutdownhook) kích hoạt ngay trước khi PHP tắt thực thi. Regex phải hoạt động xuyên suốt mọi thứ , và đó có thể là rất nhiều nội dung!

Các style_loader_tagscript_loader_tagcách tiếp cận ở trên chỉ chạy regex trên một chuỗi rất nhỏ (chính thẻ) nên tác động hiệu suất là không đáng kể.

Tôi cho rằng nếu bạn có nội dung tương đối tĩnh và sử dụng lớp bộ đệm, bạn có thể cố gắng giảm thiểu mối quan tâm về hiệu suất.

Tài liệu tham khảo hướng dẫn sử dụng php:


Đây là câu trả lời tốt nhất và chỉ hoạt động đúng mà không có lỗi. Cảm ơn người đàn ông.
Ivijan Stefan Stipić

Giải pháp làm việc duy nhất
Timur Gafforov

Nếu ai đó tò mò, WordPress dường như không sử dụng style_loader_taghoặc script_loader_tagbộ lọc khi thêm <script>thẻ cho tập lệnh nội tuyến . developer.wordpress.org/reference/groupes/wp_scripts/ từ
Firxworx

1

Điều này đã giúp tôi rất nhiều:

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

Cảm ơn css-trick (LeoNovais): https://css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/#post-246425


Bài đăng cụ thể mà OP ở trên đề cập đến thực sự ở đây: css-tricks.com/forums/topic/clean-up-script-tags-in-wordpress/ mật Lưu ý: tập lệnh bị bôi đen, nhưng bằng cách chọn văn bản, bạn có thể đọc nó, và nó như được đăng ở trên. LeoNovais không cung cấp bất kỳ lời giải thích bổ sung. Tôi không biết tại sao CSS Tricks bôi đen kịch bản của anh ấy.
SherylHohman

1

Theo mã trong thuộc tính loại script-loader.php bị bỏ qua khi hỗ trợ chủ đề html5 được thêm vào với các đối số tập lệnh và kiểu.

Xem các liên kết dưới đây:

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

Xây dựng @ realmag77. Điều này sẽ tận dụng plugin Tự động tối đa hóa để có thể lọc TẤT CẢ các thuộc tính loại nhưng không bị phá vỡ nếu nó không được cài đặt và kích hoạt. Dự phòng hoạt động tốt nhưng các tập lệnh và bảng định kiểu được tải thông qua các plugin sẽ không được lọc. Tôi không biết làm cách nào khác để lọc chúng nhưng thông qua việc sử dụng phần Tự động tối đa hóa.

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

Chào mừng đến với WPSE, Jeevan. Thật hữu ích nếu bạn bao gồm một lời giải thích với câu trả lời của bạn về lý do tại sao điều này giải quyết vấn đề và cách nó hoạt động.
butlerblog

0

Chà, bởi vì tôi đã thử hàng tấn mã khác và các mã được đề cập ở đây, vẫn còn dấu vết của các text/javascripttệp cốt lõi WordPress và từ các mã javascript và plugin nội tuyến khác. Sau khi kiểm tra mã này, mọi thứ đã được giải quyết:

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

Hy vọng nó có thể giúp một số :)

Cảm ơn bạn


-1

Nếu bạn gặp phải điều này với WP Fastest Cache, bạn có thể xóa thuộc tính type theo cách thủ công trong tập lệnh PHP của plugin, điều này cũng sẽ hoạt động với các plugin khác, nhưng tôi không biết các tệp mà chúng đang thêm thuộc tính loại. Đối với WP Fastest Cache, bạn nên truy cập thư mục wp-content / plugins / wp-quick-cache / inc và mở js-ích.php sau đó tìm kiếm văn bản / javascript và xóa nó bằng thuộc tính. Tôi đã có cảnh báo đó trên Trình xác thực W3 và đã sửa nó theo cách đó, cũng lưu ý rằng khi bạn cập nhật plugin có thể thay đổi, để tắt cập nhật plugin, bạn có thể chỉnh sửa wpFastestCache và thay đổi phiên bản plugin thành phiên bản như 10.0.8.7.7 này


-1

Bạn có thể tối ưu hóa mã HTML của trang web của mình như bạn muốn trong 2 bước:

  • Cài đặt plugin này: https://wordpress.org/plugins/autoptizes/
  • Kích hoạt trong các tùy chọn plugin 'Tối ưu hóa mã HTML?'
  • Trong hàm.php của chủ đề wordpress hiện tại của bạn áp dụng mã tiếp theo:

    add_filter ('autoptizes_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);

    và đừng quên thay đổi $ site_url thành liên kết trang web của bạn mà không bị gạch chéo ở cuối


-1

Bạn có thể sử dụng các chức năng dưới đây để xóa thuộc tính loại khỏi thẻ liên kết và tập lệnh.

Dán hàm bên dưới vào hàm.php để xóa loại = text / css khỏi linkthẻ

/ * Xóa thuộc tính "'type = text / css'" khỏi biểu định kiểu * /
hàm wpse51581_ leather_type ($ src) {
    return str numplace ("type = 'text / css'", '', $ src);
}
add_filter ('style_loader_tag', 'wpse51581_ leather_type');

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

Dán hàm bên dưới vào hàm.php để xóa loại = 'text / javascript' khỏi script

// * Xóa thẻ loại khỏi tập lệnh và kiểu
add_filter ('script_loader_tag', 'codless_remove_type_attr', 10, 2);
chức năng codless_remove_type_attr (thẻ $, $ xử lý) {
    trả về preg numplace ("/ type = ['\"] văn bản \ / (javascript | css) [' \ "] /", '', $ tag);
}

câu trả lời là đúng nhưng vẫn có người bình chọn tiêu cực
Infoconic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.