Lepsze rozwiązanie:
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 );
}
Dlaczego lepiej niż zaakceptowana odpowiedź IMO
- Zmienia to na samym rdzeniu, a nie na późniejszym etapie, gdzie inne rzeczy mogły już z tym zrobić.
- Ciąg wersji zachował się na miejscu i nie został usunięty!
- Nie wyrejestrowuje i nie rejestruje skryptu, ale po prostu ustawia wartość grupy, która jest zasadniczo taka sama, jak gdyby skrypt został zarejestrowany
$footer = true
.
O nie robieniu tego administratorowi
Jeśli wtyczki dodadzą wbudowaną jquery do wp_head, zakończy się niepowodzeniem, gdy jquery nie zostanie w tym momencie załadowane, więc sugeruję, aby tego unikać, dopóki miliony nie edytują witryny i nie spróbujesz zoptymalizować wydajności administratora. Dotyczy to również nakładki, dlatego należy uważać na źle zakodowane kompozycje lub wtyczki, które zakładają jquery w głowie za pomocą wbudowanego kodu jQuery. WP i wtyczki rejestrują inne skrypty do administratora z jquery w deps, więc myślę, że i tak nie działałoby.
O tym nie działa
Musisz być świadomy, że jeśli jakikolwiek inny skrypt zostanie załadowany do nagłówka, który ma jQuery w swoich zależnościach, spowoduje to również załadowanie jQuery do nagłówka tuż przed sobą. Jest to dobre i oczekiwane powód, dla którego istnieje system wp_enqueue. Oznacza to, że wkrótce się dowiesz, jeśli użyjesz kilku wtyczek, że jedna z nich będzie wymagać wywoływania szumu w głowie. To niestety domyślna kolejka skryptów.
Radykalne rozwiązanie
Myślę, że to zahamuje każdy wbudowany JS, który zakłada jquery, ale powinien to być rzadki. Zmusi to wszystkie skrypty do stopki, niezależnie od tego, jak są kolejkowane.
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
zamiast tego rozważyć dodanie tagów skryptu: matthewhorne.me/defer-async-wordpress-scripts