В этом уроке пожалуй довольно подробно поговорим про кропотливую оптимизацию CSS и JS-файлов, подключаемых плагинами и темами в WordPress.
Кропотливой называю её не потому, что мы не только поотключаем всё ненужное (и не будем использовать плагинов для объединения скриптов кстати), но к тому же ещё и поговорим про подключение скриптов и стилей только на тех страницах, на которых они нужны. Такое бывает нужно далеко не всегда, возможно там файлик на пару килобайт, то какой смысл подключать его только на той странице, на которой он используется, но иногда это может быть вполне увесистый функционал. Для подключения скриптов в зависимости от страницы можно воспользоваться как условными тегами WordPress, так и функцией get_current_screen(), если мы говорим об админке.
Скрипты и стили в WordPress очень легко отключаются и переподключаются, но единственное, что нам нужно для этого, это знать их ID.
В целом узнать его можно одним из трёх способов:
<style>
и <script>
.Способы я случайно расположил в порядке увеличения их сложности, но теперь я готов подробно описать каждый из них.
Это самый лёгкий из перечисленных способов, потому что всё, что нам потребуется, это открыть исходный HTML страницы сайта, на которой используется скрипт, а сделать это можно в любом браузере, который вы используете (ну кроме мобильных браузеров разве что).
Мы либо:
После того, как у нас открылся HTML-код, нам нужно либо направиться в тег <head>
сайта, либо, если там ничего не нашли, смотрим в самом низу страницы, ближе к закрывающему тегу </body>
. Ну и поиск никто не отменял, если вы уже знаете, какой файл вам нужен.
К примеру, я хочу отключить и CSS и JS плагина Contact form 7.
В самом верху исходного кода в инспекторе я нахожу его таблицу стилей:
А внизу ещё и скрипты:
Уже догадались, как узнать их ID?
id
тега <link>
и удаляем суффикс -css
, значит ID будет contact-form-7
(Можно было бы и догадаться без всего этого, ага? Но не всегда бывает так легко).id
тега <script>
и удаляем суффикс -js
, значит у нас получится… угадайте что… contact-form-7
.Если вы использовали этот способ и у вас всё получилось, то уже можно переходить ко второму шагу.
Вот сниппет кода, из которого вы сразу же можете создать готовый плагин. Если вам сложно, то его можно и скачать и установить из ZIP-архива.
<?php /* Plugin Name: ID стилей и скриптов Plugin URI: https://misha.agency/wordpress/kak-otklyuchit-css-i-js-plagina.html Description: Плагин отобразит идентификаторы всех стилей и скриптов за пределами админки сайта. Author: Миша Рудрастых Version: 1.0 Author URI: https://misha.agency */ add_action( 'wp_print_scripts', 'true_inspect_script_style' ); function true_inspect_script_style() { global $wp_scripts, $wp_styles; // не запускаем для неадминистраторов if( ! current_user_can( 'administrator' ) ) { return; } // не запускаем в админке, иначе мы в неё уже не попадём if( is_admin() ) { return; } // погнали wp_die( ' <h1>Scripts</h1> <p>' . join( '<br>', $wp_scripts->queue ) . '</p> <h1>Styles</h1> <p>' . join( '<br>', $wp_styles->queue ) . '</p> ' ); }
После активации плагина, если перейти на сайт, то у вас должно будет отобразиться что-то вроде того, что на скриншоте ниже.
И несмотря на то, что в плагине присутствует условие, чтобы он выводил то, что выводит, только для администраторов, я всё же рекомендую использовать его на тестовом сайте по возможности.
Тут конечно вам потребуется редактор кода, который позволяет искать по файлам, просматривать файлы по одному вообще смысла нет.
Всё, что нам требуется сделать, это добавить папку плагина в поиск и поискать в нём использование функций wp_enqueue_script(), wp_enqueue_style(), wp_register_script() и wp_register_style(). Как правило ID передаётся в качестве первого параметра любой из этих функций.
Отключаются и стили и скрипты довольно легко – при помощи пары функций и одного хука – wp_enqueue_scripts
, единственный момент, для админки этот хук будет admin_enqueue_scripts
. И ещё обратите внимание – и для скриптов, и для стилей хук одинаковый!
add_action( 'wp_enqueue_scripts', 'true_no_contact_form_css_and_js', 999 ); function true_no_contact_form_css_and_js() { wp_dequeue_style( 'contact-form-7' ); wp_dequeue_script( 'contact-form-7' ); }
Если не знаете, куда вставлять код, почитайте это.
Ах да, чуть не забыл сказать про приоритет действия хука 999
– если вы тут ничего не укажете, или укажете какое-нибудь маленькое число, например 2
, то ничего не сработает! Если для вас является загадкой почему так происходит, то рекомендую мой видеоурок по хукам в WordPress.
Отлично, файлы стилей и скриптов плагина Contact Form 7 отключены и не вставляются на страницу, главная страница сайта в Google Pagespeed выдаёт заветную сотню и наша форма обратной связи перестала работать.
Этого ли эффекта мы желали?
Если да, то конечно читать дальше не нужно, если форма обратной связи вам ещё пригодится, то почему бы не отключить скрипты на всех страницах кроме тех, на которых отображается форма? Предположим, что у нас это страница misha.agency/contact
. И именно тут нам на помощь приходят условные теги WordPress, о которых я упоминал чуть выше. Немного переработанный код ниже:
add_action( 'wp_enqueue_scripts', 'true_no_contact_form_css_and_js', 999 ); function true_no_contact_form_css_and_js() { // находимся не на странице контактов? сразу выходим из функции if( ! is_page( 'contact' ) ) { return; } wp_dequeue_style( 'contact-form-7' ); wp_dequeue_script( 'contact-form-7' ); }
Ну, и если вы захотите проделать подобное в админки, то в коде будут некоторые изменения:
wp_enqueue_scripts
используем admin_enqueue_scripts
.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.