Категория: Wordpress
Статья 7 комментариев
22.01 2010

Удобный способ объединения CSS и JavaScript файлов в wordpress

Удобный способ объединения CSS и JavaScript файлов в wordpress

Начнём с того, для чего это, собственно, нужно. Об этом я уже писал в этой статье в пунктах Combine external JavaScript и Combine external CSS, так что повторяться смысла не вижу.

Совершенно очевидно, что для того, чтобы объединить файлы CSS или JavaScript можно просто залезть в код плагинов и вырезать код их подключения. Но тогда при первом же обновлении плагинов всё придется повторить заново. А если таких плагинов у нас установлено несколько, то все эти процедуры могут очень быстро надоесть.

К счастью wordpress – движок очень гибкий и позволяет обойти эту проблему стороной. Если плагин для подключения файлов использует функции wp_enqueue_script() и wp_enqueue_style(), то отключить их можно без редактирования кода этих плагинов.

Чтобы привести пример, отключим JavaScript у Contact Form 7 и файл CSS у плагина WP-PageNavi.

Отключаем JavaScript.

Для этого нам нужно узнать идентификатор скрипта. Открываем файл wp-contact-form-7.php и ищем в нем строку wp_enqueue_script. В результате находим вот такой код:

wp_enqueue_script( 'contact-form-7', wpcf7_plugin_url( 'contact-form-7.js' ), array('jquery', 'jquery-form'), WPCF7_VERSION, $in_footer );

В данном случае идентификатор – contact-form-7. Запоминаем его, а файл плагина закрываем, его мы трогать не будем.

Теперь открываем файл functions.php нашей темы и добавляем в неё следующий код:

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
	wp_deregister_script( 'contact-form-7' );
}

Готово! Теперь скрипт подгружаться не будет.

Отключаем CSS.

Узнаем идентификатор: открываем файл wp-pagenavi.php и ищем функцию wp_enqueue_style. В итоге находим вот такую строку:

wp_enqueue_style('wp-pagenavi', get_stylesheet_directory_uri().'/pagenavi-css.css', false, '2.50', 'all');

Как вы уже догадались, нужный нам идентификатор – wp-pagenavi.

Теперь добавляем в functions.php следующий код:

add_action( 'wp_print_styles', 'my_deregister_styles', 100 );

function my_deregister_styles() {
	wp_deregister_style( 'wp-pagenavi' );
}

Отныне CSS файл плагина не подключается.

Думаю алгоритм понятен. Не забудьте скопировать стили CSS из файла плагина в файл style.css своей темы. В случае со скриптами, нужно создать новый файл, например scripts.js, залить его в папку с темой и подключить его, добавив в файле header.php перед тэгом </head> вот такую строку:

<script src="<?php echo( bloginfo( 'template_directory' ) . '/script.js' ); ?>" type="text/javascript"></script>

Не забывайте, что JavaScript и Jquery нельзя помещать в один файл.

Чтобы объединить все скрипты и файлы CSS, можно открыть исходный код главной страницы вашего блога и посмотреть, какие файлы подключаются. Затем провести описанные выше процедуры с каждым из них.

Удобство этого метода заключается в том, что теперь после каждого обновления плагинов нам не нужно будет повторять все эти действия заново.

Эту статью можно считать дополнением к Как я уменьшил время загрузки своего блога в 4 раза. Часть 2.

  1. Комментарии:

  2. 01.24.2010

    Ян, спасибо за полезную информацию.

    Пара советов:
    а) думаю, стоит написать в начале статьи – какой вообще смысл в этих действиях. В противном случае большинство не-программистов в принципе не поймут суть.

    б) стоит упомянуть тот факт, что при обновлении плагина все вернется на свои места и операцию нужно будет повторить заново.

    Ответить

    Ян Такушевич отвечает:

    На счёт пункта а) Вы наверное правы, сейчас внесу изменения в статью.
    А вот на счет пункта б) – прочитайте статью еще раз, только внимательно, и поймёте, что Вы ошибаетесь :)

    Ответить

    Yaroslav.CH отвечает:

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

    Мы же отключаем вывод собственных скриптов и стилей плагина, но не обеспечиваем автоматические копирование новых строк поверх старых.

    Ответить

  3. Ян Такушевич
    01.24.2010

    Теперь согласен, но всё равно не на 100%
    Дело в том, что CSS стили плагинов меняются редко, потому что, как правило, их авторы в новых версиях исправляют какие-либо баги, делают небольшие дополнения, но внешний вид меняется очень редко.
    НА счёт JS – обновляется он чаще, но это можно легко вычислить – после обновления плагина достаточно просто проверить его работоспособность и если что-то не так – заново скопировать код. Но это, опять же, вряд ли понадобится делать каждый раз.

    Ответить

    Yaroslav.CH отвечает:

    В отношении CSS – рассматриваемый плагин может быть и плагином меню, к которому CSSы меняют довольно часто.

    Не все плагины можно проверить так легко – только что Вы сами столкнулись с неработоспособностью антиспам-плагина комментариев, которую “не проверишь – не найдешь” :)
    Собственно, все это я к тому, что совет действительно полезный, но стоило бы просто немного расширить статью, предупредив читателей о том, что в случае ошибки, проблему стоит начать искать именно в этой области.

    Ответить

    Ян Такушевич отвечает:

    Вы это уже сделали, спасибо! :)

    Ответить

  4. 01.24.2010

    Спасибо Вам за хорошую статью, уже смотрю как применить на практике :)

    Ответить