Одним из “узких” мест при загрузке страницы является подключение java-скриптов. Сейчас практически ни один серьезный проект не обходится без их использования – все эти модные слайдеры, всплывающие окна, выпадающие меню, выезжающие панели, плавно исчезающие и меняющие цвет формы, – все это использует скрипты, иногда достаточно тяжеловесные. И при загрузке казалось бы вполне безобидной, простой страницы, вместе с ней загружаются, а иногда и тут же выполняются java-скрипты. Все это требует времени, что в конечном итоге отражается на скорости загрузки и отображения страниц. Если же java-скрипты не поспевают за общим ходом загрузки, то это приводит к визуально неприятным последствиям, которые выражаются в постоянном дерганье элементов на ней, появлении пустых пространств. Что можно предпринять в таком случае? Есть одна хитрость, к которой я иногда прибегаю, если проект позволяет это реализовать. В чем ее суть?
Многие формы, поля, меню, слайдеры, которые за собой тянут целый воз java-скриптов, вставляются авторами постов с помощью шорткодов. Чтобы java-скрипты, обеспечивающие всю эту красоту, не загружались всегда и на всех страницах, можно создать специальное условие: если в тексте поста есть шорткод, вызывающий функционал, для обеспечения работы которого подгружаются java-скрипты, то эти скрипты загружаются, а если шорткода нет, то скрипты не грузятся. Выглядит это условие примерно так:
function shortcode_checker() { global $post; if( has_shortcode( $post->post_content, 'your-shortcode') ) { wp_enqueue_script( '.../script.js'); } } add_action( 'wp_enqueue_scripts', 'shortcode_checker');
your-shortcode – это шорткод, наличие которого в посте нужно проверить
…/script.js – это путь к подключаемому java-скрипту
Таким образом можно сократить количество постоянно загружаемых скриптов – пусть загружаются только тогда, когда они нужны. Исключение загрузки лишних скриптов благотворно скажется на времени загрузки страниц блога.
Не самый оптимальный вариант, поскольку has_shortcode() повторно исполнит огромное регулярное выражение из shortcodes.php, а глобальная перменная $post будет иметь лишь первую запись, даже если на странице их отображено 10, например на главной или в архивах, тогда ваш скрипт так и не подключится.
Наиболее оптимальным вариантом будет вызов wp_enqueue_script() прямо в обработчике шорткода, тогда скрипт будет подключен в футере.
А можно пример, как вызвать wp_enqueue_script() прямо в обработчике шорткода?