Лучшее решение:
add_action( 'wp_default_scripts', 'move_jquery_into_footer' );
function move_jquery_into_footer( $wp_scripts ) {
if( is_admin() ) {
return;
}
$wp_scripts->add_data( 'jquery', 'group', 1 );
$wp_scripts->add_data( 'jquery-core', 'group', 1 );
$wp_scripts->add_data( 'jquery-migrate', 'group', 1 );
}
Почему это лучше, чем принятый ответ ИМО
- Изменяет его в самом ядре, а не на более поздней стадии, когда другие вещи могут уже с ним замешаться.
- Строка версии хранится и не удаляется!
- Он не отменяет регистрацию и повторную регистрацию сценария, а просто устанавливает значение группы, которое по существу совпадает с тем, как если бы сценарий был зарегистрирован в
$footer = true
.
О не делать это с администратором
Если плагины добавят встроенный jquery в wp_head, произойдет сбой, когда jquery не будет загружен в этот момент, поэтому я советую вам избегать этого, пока у вас не появятся миллионы, которые редактируют ваш сайт, и вы не попытаетесь оптимизировать производительность своего администратора. Это верно и для внешнего интерфейса, поэтому вы должны следить за плохо закодированными темами или плагинами, которые принимают jquery в голове, используя встроенный код jQuery. WP и плагины регистрируют другие сценарии для административной головы с помощью jquery в deps, так что я думаю, что это не сработает.
Про это не работает
Вы должны знать, что если любой другой скрипт загружается в заголовок, имеющий jQuery в своих зависимостях, он также загрузит jQuery в заголовок прямо перед собой. И это хорошо и ожидаемо, причина существования системы wp_enqueue. Это означает, что вы скоро узнаете, если будете использовать несколько плагинов, для которых один из них потребует вызова jquery в голову. К сожалению, по умолчанию для сценариев в очереди.
Радикальное Решение
Я думаю, что это будет тормозить любой встроенный JS, который предполагает JQuery, но если это должно быть редко. Это заставит все скрипты в нижний колонтитул, независимо от того, как они в очереди.
add_action( 'wp_enqueue_scripts', 'js_to_footer' );
function js_to_footer() {
remove_action( 'wp_head', 'wp_print_scripts' );
remove_action( 'wp_head', 'wp_print_head_scripts', 9 );
remove_action( 'wp_head', 'wp_enqueue_scripts', 1 );
}
defer
вместо этого добавить к своим тегам сценария: matthewhorne.me/defer-async-wordpress-scripts