Tôi đã phát triển một plugin cho vấn đề cụ thể này. Plugin này không gây rối với WordPress jQuery vì nó chỉ được tải ở phần đầu. Xem: Trình quản lý jQuery cho WordPress
Tại sao lại là một công cụ cập nhật / quản lý / phát triển / gỡ lỗi jQuery khác?
Bởi vì không có công cụ dành cho nhà phát triển nào cho phép bạn chọn một phiên bản cụ thể của jQuery và / hoặc jQuery Migrate. Cung cấp cả phiên bản nén / sản xuất nén và phiên bản không nén / phát triển. Xem các tính năng dưới đây!
Chỉ được thực hiện ở mặt trước, không can thiệp vào quản trị viên / phụ trợ WordPress và tùy biến WP (vì lý do tương thích) Xem:
https://core.trac.wordpress.org/ticket/45130 và
https: // core. trac.wordpress.org/ticket/37110
✅ Bật / tắt jQuery và / hoặc jQuery Di chuyển
Kích hoạt một phiên bản cụ thể của jQuery và / hoặc jQuery Migrate
Và nhiều hơn nữa! Mã này là nguồn mở, vì vậy bạn có thể nghiên cứu nó, học hỏi từ nó và đóng góp.
Hầu như mọi người đều sử dụng tay cầm không chính xác
WordPress thực sự sử dụng tay cầm jquery-core chứ không phải jquery:
https://github.com/WordPress/WordPress/blob/f84ab5e19f0038a3abec71821c9b8f47a4272942/wp-includes/script-loader.php#L1017
// jQuery
$scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4-wp' );
$scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4-wp' );
$scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );
Các jquery xử lý chỉ là một bí danh để tải jquery-core với jquery-di chuyển
Xem thêm thông tin về bí danh: wp_register_script nhiều định danh?
Cách chính xác để làm điều đó
Trong ví dụ dưới đây, tôi sử dụng CDN jQuery chính thức tại https://code.jquery.com Tôi cũng sử dụng script_loader_tag để tôi có thể thêm một số thuộc tính CDN.
Bạn có thể sử dụng mã sau đây:
// Front-end not excuted in the wp admin and the wp customizer (for compatibility reasons)
// See: https://core.trac.wordpress.org/ticket/45130 and https://core.trac.wordpress.org/ticket/37110
function wp_jquery_manager_plugin_front_end_scripts() {
$wp_admin = is_admin();
$wp_customizer = is_customize_preview();
// jQuery
if ( $wp_admin || $wp_customizer ) {
// echo 'We are in the WP Admin or in the WP Customizer';
return;
}
else {
// Deregister WP core jQuery, see https://github.com/Remzi1993/wp-jquery-manager/issues/2 and https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
wp_deregister_script( 'jquery' ); // the jquery handle is just an alias to load jquery-core with jquery-migrate
// Deregister WP jQuery
wp_deregister_script( 'jquery-core' );
// Deregister WP jQuery Migrate
wp_deregister_script( 'jquery-migrate' );
// Register jQuery in the head
wp_register_script( 'jquery-core', 'https://code.jquery.com/jquery-3.3.1.min.js', array(), null, false );
/**
* Register jquery using jquery-core as a dependency, so other scripts could use the jquery handle
* see /wordpress/283828/wp-register-script-multiple-identifiers
* We first register the script and afther that we enqueue it, see why:
* /wordpress/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
* /programming/39653993/what-is-diffrence-between-wp-enqueue-script-and-wp-register-script
*/
wp_register_script( 'jquery', false, array( 'jquery-core' ), null, false );
wp_enqueue_script( 'jquery' );
}
}
add_action( 'wp_enqueue_scripts', 'wp_jquery_manager_plugin_front_end_scripts' );
function add_jquery_attributes( $tag, $handle ) {
if ( 'jquery-core' === $handle ) {
return str_replace( "type='text/javascript'", "type='text/javascript' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'", $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'add_jquery_attributes', 10, 2 );
defer
thay vào đó , bạn có thể xem xét thêm vào thẻ script của mình: matthewhorne.me/defer-async-wordpress-scripts