Краще рішення:
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 не завантажується в цей момент, тому я пропоную вам уникати цього, поки не буде мільйони редагувати ваш сайт, і ви не спробуєте оптимізувати ефективність роботи свого адміністратора. Це справедливо і для frontend, тому вам слід поспостерігати за погано кодованими темами або плагінами, які припускають 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