Можно играть
10.03.20

Удаляем атрибуты Type у скриптов и стилей WordPress

Удаляем атрибуты Type у скриптов и стилей WordPress

Приветствую всех! На днях, при проверке своих сайтов на WordPress столкнулся с предупреждениями в валидаторе кода — w3c. Пишет мол, что объявлять атрибут type для скриптов и стилей сейчас вовсе не нужно.

<style type="text/css"></style>
<script type="text/javascript"></script>

После некоторых исследований и поиска информации в вебе, обнаружил, что и в правду в HTML 5 больше не требуется указывать эти атрибуты.

Как быть с WP?

В просто верстке html это легко подредактировать и исправить. Но, а как быть с WordPress? Ведь у него файлы подключаются при помощи функций wp_enqueue_script и wp_enqueue_style и на автомате проставляются эти атрибуты.

Но, как всегда, разработчики WordPress и это учли, и создали 2 хука, использую которые мы с легкостью можем удалить эти «шероховатости».


Читайте также:


Хуки

  1. style_loader_tag — для стилей
  2. script_loader_tag — для скриптов

Функции

Ниже, я написал функцию, которая удаляет все атрибуты type из подключаемых файлов JS и Style в WordPress.

Приведенный ниже код помещаем в файл functions.php

add_filter('style_loader_tag', 'cmswp_remove_type_attr', 10, 2);
add_filter('script_loader_tag', 'cmswp_remove_type_attr', 10, 2);
function cmswp_remove_type_attr($tag, $handle) {
    return preg_replace( "/type=['\"]text\/(javascript|css)['\"]/", '', $tag );
}

Функция ниже, убирает атрибуты по всему сайту, даже в контенте статьи.

add_action( 'template_redirect', function(){
   ob_start( function( $buffer ){
      $buffer = str_replace( array( 'type="text/javascript"', "type='text/javascript'" ), '', $buffer );
      $buffer = str_replace( array( 'type="text/css"', "type='text/css'" ), '', $buffer );
      return $buffer;
   });
});

Одно, но

Теперь, по сути, проблема решена, но скорее всего, не у всех файлов плагинов и тем, которые установлены и активированы в админке будут убираться эти атрибуты.

Почему? Потому что некоторые шаблоны и плагины подключают свои файлы как-то иначе, может быть и просто вставкой кода непосредственно в html или какими-то своими функциями, на которые код выше срабатывать не будет.

Пишите в комментариях, если остались какие-либо вопросы!

P.S.

Имейте в виду, что подобные предупреждения не являются какими-то ошибками, поэтому вы можете объяснить это и своим заказчикам. В любом случае, когда нибудь будет и такой клиент, который захочет, чтобы тест валидатора w3c был без ошибок и любых предупреждений.

С уважением, с вами был Дмитрий!