Когда вы создаете тему, то вы добавляете css-стили, как из основного файла style.css, так и из других файлов (например, каких-либо сторонних плагинов). Когда вы уже написали тему, добавили сайт в Google Search Console и решили проверить скорость загрузки страниц в Google PageSpeed Insights, вдруг оказывается, что стилей у вас слишком много, часть из них не используется и при этом замедляет загрузку сайта. И вы стоите перед проблемой - а как же теперь убрать лишние стили? И тот же вопрос касается скриптов. И он является очень важным, потому что вопросам оптимизации сайта Google уделяет много внимания.

Функции для удаления  стилей и скриптов

Для удаления стилей и/или скриптов, зарегистрированных в теме или в любых плагинах, можно использовать такие функции:

  1. wp_dequeue_style($handle) - удаляет из очереди на вывод файл css-стилей, который был добавлен в очередь вывода файлов стилей с помощью функции wp_enqueue_style().
  2. wp_deregister_style($handle) - отменяет регистрацию файла CSS-стилей. Функция может пригодится, когда нужна перерегистрация стилей, когда нужно изменить файл стилей, но оставить прежний идентификатор.
  3. wp_enqueue_scripts($handle) - отменяет подключение скрипта, который был добавлен в очередь ранее.
  4. wp_deregister_script($handle) - удаляет ранее зарегистрированный скрипт.

$handle - это идентификатор файла стилей, который нужно удалить из очереди на вывод. То есть это атрибут id, который указан в тегах link, style или script. Идентификатор устанавливается при регистрации стилей в функциях wp_register_style(),wp_enqueue_style() или  wp_enqueue_script().

Важно: все перечисленные нужно вызывать после того, как стиль (скрипт) был добавлен в очередь на подключение функциями wp_enqueue_style() или wp_enqueue_script(). Если любая из функций вида wp_dequeue_... или wp_deregister_... будет вызвана до того, как отключаемый стиль или скрипт будет добавлен в очередь, то она работать не будет, а будет только зря будет потреблять ресурсы.

Поэтому, чтобы использовать эти функции, нужно вызвать их, привязав вызов к одному из хуков:

  • wp_print_styles
  • wp_print_scripts
  • wp_enqueue_scripts
  • wp_default_scripts
  • init

Для того чтобы отключение произошло наверняка, можно указать более поздний приоритет для хука. Значение по умолчанию равно 10, поэтому для более позднего запуска нужно значение 11 и больше, например, 20 или 100. Это последний параметр в функции add_action():

Если вы удаляете какие-либо стили или скрипты для админ-панели, используйте такие хуки-события:

  • admin_enqueue_scripts,
  • admin_print_scripts,
  • admin_print_styles

Для страница входа нужноиспользовать хук login_enqueue_scripts.

Хук init, например, используется для отключения такого скрипта, как Heartbeat, что позволяет оптимизировать нагрузку на ЦП вашего веб-сервера.

Убираем стили блочного редактора Gutenberg

В том случае, если блочный редактор в WordPress вам пришелся не по душе, стоит не только подключить плагин Classic Editor, но и удалить ссылку на уже неиспользуемую его стилевую таблицу:

После этого из кода вашей страницы  должна исчезнуть ссылка вида

Обратите внимание на атрибут id в этой ссылке. Из текста id='wp-block-library-css' в качестве id для удаления скрипта мы берем только 'wp-block-library', без приставки "-css", т.к. ее добавляет сам WordPress.

Убираем inline-стили

Однако, это еще не все. Оказывается часть стилей добавляется в виде inline-кода. Поэтому в коде страницы вы встречаете примерно такой код:

Тут тоже важно обратить внимание на id для тега <style>. Например, id='global-styles-inline-css' содержит в конце такую же приставку '-css', как и в предыдущем примере. Однако убрать только ее из встроенного в <head> inline-стиля будет недостаточно. Нужно убирать приставку "-inline-css".

Код будет таким:

Проверьте свой код - встроенные стили должны уйти.

Удаляем стили и скрипты ContactForm 7

Достаточно часто вы добавляете плагины, которые используются на 1-2 страницах, но свой css- и js-код добавляют на все страницы сайта. Например, у вас есть страница контактов, на которой используется форма из плагина ContactForm 7. Вы больше нигде не используете формы, однако плагин добавляет данные о скриптах и стилях на все страницы. Поэтому стоит удалить ссылки на css- и js-файлы отовсюду, кроме страницы контактов.

В коде ниже мы проверяем в функции is_page() слаг страницы контактов ('kontakty'), а для остальных страниц удаляем стили и скрипты.

Проверьте страницы - вы не найдете на них стилей и скриптов ContactForm  7.

Удаляем jQuery Migrate

В том случае, когда у вас есть код на jQuery, но он написан для современных версий, вы можете удалить файл jQuery Migrate,

Обратите внимание, что мы вызываем функцию для отмены в хуке wp_default_scripts, как и для удаления стилей wp-block-library.

Автор: Админ

2 комментария

  1. Доброго времени и благодарю за такой подробный материал!
    Но у меня не получается удалить линки. Вставляю код в function.php своей темы, естественно везде заменяю (my_theme) на свою тему, результат ноль. Может быть есть мысли в чем причина?

    • Сложно, конечно, без просмотра кода, ответить на этот вопрос, но, возможно, стоит поискать причину в id ваших скриптов. Некоторые темы добавляют свои, очень специфичные id. Иногда стоит посмотреть файлы темы, чтобы найти, как именно подключались скрипты. То же касается и файлов плагинов. Можно поискать код подключения стиля/скрипта, чтобы удалить его по правильному id.

      Второй момент касается хуков подключения. Как правило, подключение скриптов и стилей связано с хуком wp_enqueue_scripts, но ваш стиль или скрипт может быть подключен с помощью другого хука, например, wp_default_scripts, поэтому удаление тоже не срабатывает.

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

      И последнее, что приходит в голову - это неверный вызов функции. Например, вы написали add_action( 'wp_enqueue_scripts', 'my_theme_scripts', 100 );, а функцию назвали function temp_scripts() { ... }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *